Index: gdb/symfile.h |
diff --git a/gdb/symfile.h b/gdb/symfile.h |
index 604fe163406c0b20c4400e41208c34d9895947d5..aca73594d7ebdb1a7e289c7a2c985aa191e29a29 100644 |
--- a/gdb/symfile.h |
+++ b/gdb/symfile.h |
@@ -22,6 +22,7 @@ |
/* This file requires that you first include "bfd.h". */ |
#include "symtab.h" |
+#include "gdb_vecs.h" |
/* Opaque declarations. */ |
struct target_section; |
@@ -29,6 +30,11 @@ struct objfile; |
struct obj_section; |
struct obstack; |
struct block; |
+struct probe; |
+struct value; |
+struct frame_info; |
+struct agent_expr; |
+struct axs_value; |
/* Comparison function for symbol look ups. */ |
@@ -153,7 +159,7 @@ struct quick_symbol_functions |
/* Expand and iterate over each "partial" symbol table in OBJFILE |
where the source file is named NAME. |
- If there is no '/' in the name, a match after a '/' in the symbol |
+ If NAME is not absolute, a match after a '/' in the symbol |
table's file name will also work. FULL_PATH is the absolute file |
name, and REAL_PATH is the same, run through gdb_realpath. |
@@ -176,7 +182,9 @@ struct quick_symbol_functions |
indicates what sort of symbol to search for. |
Returns the newly-expanded symbol table in which the symbol is |
- defined, or NULL if no such symbol table exists. */ |
+ defined, or NULL if no such symbol table exists. If OBJFILE |
+ contains !TYPE_OPAQUE symbol prefer its symtab. If it contains |
+ only TYPE_OPAQUE symbol(s), return at least that symtab. */ |
struct symtab *(*lookup_symbol) (struct objfile *objfile, |
int kind, const char *name, |
domain_enum domain); |
@@ -258,13 +266,10 @@ struct quick_symbol_functions |
file is skipped. If FILE_MATCHER is NULL such file is not skipped. |
Otherwise, if KIND does not match this symbol is skipped. |
- |
+ |
If even KIND matches, then NAME_MATCHER is called for each symbol |
- defined in the file. The current language, the symbol name and |
- DATA are passed to NAME_MATCHER. The symbol "natural" name should |
- be passed to NAME_MATCHER for all languages except Ada, where |
- the encoded name is passed instead (see la_symbol_name_compare in |
- struct language_defn for more details on this). |
+ defined in the file. The symbol "search" name and DATA are passed |
+ to NAME_MATCHER. |
If NAME_MATCHER returns zero, then this symbol is skipped. |
@@ -275,7 +280,7 @@ struct quick_symbol_functions |
void (*expand_symtabs_matching) |
(struct objfile *objfile, |
int (*file_matcher) (const char *, void *), |
- int (*name_matcher) (const struct language_defn *, const char *, void *), |
+ int (*name_matcher) (const char *, void *), |
enum search_domain kind, |
void *data); |
@@ -300,6 +305,52 @@ struct quick_symbol_functions |
int need_fullname); |
}; |
+/* Structure of functions used for probe support. If one of these functions |
+ is provided, all must be. */ |
+ |
+struct sym_probe_fns |
+{ |
+ /* If non-NULL, return an array of probe objects. |
+ |
+ The returned value does not have to be freed and it has lifetime of the |
+ OBJFILE. */ |
+ VEC (probe_p) *(*sym_get_probes) (struct objfile *); |
+ |
+ /* Return the number of arguments available to PROBE. PROBE will |
+ have come from a call to this objfile's sym_get_probes method. |
+ If you provide an implementation of sym_get_probes, you must |
+ implement this method as well. */ |
+ unsigned (*sym_get_probe_argument_count) (struct objfile *objfile, |
+ struct probe *probe); |
+ |
+ /* Evaluate the Nth argument available to PROBE. PROBE will have |
+ come from a call to this objfile's sym_get_probes method. N will |
+ be between 0 and the number of arguments available to this probe. |
+ FRAME is the frame in which the evaluation is done; the frame's |
+ PC will match the address of the probe. If you provide an |
+ implementation of sym_get_probes, you must implement this method |
+ as well. */ |
+ struct value *(*sym_evaluate_probe_argument) (struct objfile *objfile, |
+ struct probe *probe, |
+ unsigned n); |
+ |
+ /* Compile the Nth probe argument to an agent expression. PROBE |
+ will have come from a call to this objfile's sym_get_probes |
+ method. N will be between 0 and the number of arguments |
+ available to this probe. EXPR and VALUE are the agent expression |
+ that is being updated. */ |
+ void (*sym_compile_to_ax) (struct objfile *objfile, |
+ struct probe *probe, |
+ struct agent_expr *expr, |
+ struct axs_value *value, |
+ unsigned n); |
+ |
+ /* Relocate the probe section of OBJFILE. */ |
+ void (*sym_relocate_probe) (struct objfile *objfile, |
+ struct section_offsets *new_offsets, |
+ struct section_offsets *delta); |
+}; |
+ |
/* Structure to keep track of symbol reading functions for various |
object file types. */ |
@@ -370,6 +421,10 @@ struct sym_fns |
bfd_byte *(*sym_relocate) (struct objfile *, asection *sectp, bfd_byte *buf); |
+ /* If non-NULL, this objfile has probe support, and all the probe |
+ functions referred to here will be non-NULL. */ |
+ const struct sym_probe_fns *sym_probe_fns; |
+ |
/* The "quick" (aka partial) symbol functions for this symbol |
reader. */ |
const struct quick_symbol_functions *qf; |
@@ -592,6 +647,7 @@ struct dwarf2_debug_sections { |
struct dwarf2_section_names str; |
struct dwarf2_section_names ranges; |
struct dwarf2_section_names types; |
+ struct dwarf2_section_names addr; |
struct dwarf2_section_names frame; |
struct dwarf2_section_names eh_frame; |
struct dwarf2_section_names gdb_index; |