aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Benson <gbenson@redhat.com>2015-01-31 14:45:26 -0800
committerDoug Evans <xdje42@gmail.com>2015-01-31 14:45:26 -0800
commit276d885b572b12221f639641846ab94ef9582995 (patch)
tree979dd34e3f0f20d27e1bf1b7227b25bde3b17ff1
parent5dd31d7995882a43fab9b35b11775499126d7bd8 (diff)
downloadgdb-276d885b572b12221f639641846ab94ef9582995.zip
gdb-276d885b572b12221f639641846ab94ef9582995.tar.gz
gdb-276d885b572b12221f639641846ab94ef9582995.tar.bz2
new callback parameter expansion_notify for expand_symtabs_matching
This commit adds a new callback parameter, "expansion_notify", to the top-level expand_symtabs_matching function and to all the vectorized functions it defers to. If expansion_notify is non-NULL, it will be called every time a symbol table is expanded. gdb/ChangeLog: * symfile.h (expand_symtabs_exp_notify_ftype): New typedef. (struct quick_symbol_functions) <expand_symtabs_matching>: New argument expansion_notify. All uses updated. (expand_symtabs_matching): New argument expansion_notify. All uses updated. * symfile-debug.c (debug_qf_expand_symtabs_matching): Also print expansion notify. * symtab.c (expand_symtabs_matching_via_partial): Call expansion_notify whenever a partial symbol table is expanded. * dwarf2read.c (dw2_expand_symtabs_matching): Call expansion_notify whenever a symbol table is instantiated.
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/ada-lang.c6
-rw-r--r--gdb/dwarf2read.c16
-rw-r--r--gdb/linespec.c2
-rw-r--r--gdb/psymtab.c9
-rw-r--r--gdb/symfile-debug.c5
-rw-r--r--gdb/symfile.c4
-rw-r--r--gdb/symfile.h8
-rw-r--r--gdb/symmisc.c2
-rw-r--r--gdb/symtab.c6
10 files changed, 60 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 33e0dff..d97b9c4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,17 @@
+2015-01-31 Gary Benson <gbenson@redhat.com>
+
+ * symfile.h (expand_symtabs_exp_notify_ftype): New typedef.
+ (struct quick_symbol_functions) <expand_symtabs_matching>:
+ New argument expansion_notify. All uses updated.
+ (expand_symtabs_matching): New argument expansion_notify.
+ All uses updated.
+ * symfile-debug.c (debug_qf_expand_symtabs_matching):
+ Also print expansion notify.
+ * symtab.c (expand_symtabs_matching_via_partial): Call
+ expansion_notify whenever a partial symbol table is expanded.
+ * dwarf2read.c (dw2_expand_symtabs_matching): Call
+ expansion_notify whenever a symbol table is instantiated.
+
2015-01-31 Doug Evans <xdje42@gmail.com>
* cli-out.c: #include completer.h, readline/readline.h.
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index f5753f1..f4f5bf3 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -6247,8 +6247,8 @@ ada_make_symbol_completion_list (const char *text0, const char *word,
data.word = word;
data.wild_match = wild_match_p;
data.encoded = encoded_p;
- expand_symtabs_matching (NULL, ada_complete_symbol_matcher, ALL_DOMAIN,
- &data);
+ expand_symtabs_matching (NULL, ada_complete_symbol_matcher, NULL,
+ ALL_DOMAIN, &data);
}
/* At this point scan through the misc symbol vectors and add each
@@ -12992,7 +12992,7 @@ ada_add_global_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
struct objfile *objfile;
struct compunit_symtab *s;
- expand_symtabs_matching (NULL, ada_exc_search_name_matches,
+ expand_symtabs_matching (NULL, ada_exc_search_name_matches, NULL,
VARIABLES_DOMAIN, preg);
ALL_COMPUNITS (objfile, s)
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 090d1a5..56e82f5 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3825,6 +3825,7 @@ dw2_expand_symtabs_matching
(struct objfile *objfile,
expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind,
void *data)
{
@@ -3996,7 +3997,20 @@ dw2_expand_symtabs_matching
per_cu = dw2_get_cutu (cu_index);
if (file_matcher == NULL || per_cu->v.quick->mark)
- dw2_instantiate_symtab (per_cu);
+ {
+ int symtab_was_null =
+ (per_cu->v.quick->compunit_symtab == NULL);
+
+ dw2_instantiate_symtab (per_cu);
+
+ if (expansion_notify != NULL
+ && symtab_was_null
+ && per_cu->v.quick->compunit_symtab != NULL)
+ {
+ expansion_notify (per_cu->v.quick->compunit_symtab,
+ data);
+ }
+ }
}
}
}
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 8a0d4be..0d012b4 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -1028,7 +1028,7 @@ iterate_over_all_matching_symtabs (struct linespec_state *state,
if (objfile->sf)
objfile->sf->qf->expand_symtabs_matching (objfile, NULL,
iterate_name_matcher,
- ALL_DOMAIN,
+ NULL, ALL_DOMAIN,
&matcher_data);
ALL_OBJFILE_COMPUNITS (objfile, cu)
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index 592efd7..4ee9dc1 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1409,6 +1409,7 @@ psym_expand_symtabs_matching
(struct objfile *objfile,
expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind,
void *data)
{
@@ -1451,7 +1452,13 @@ psym_expand_symtabs_matching
}
if (recursively_search_psymtabs (ps, objfile, kind, symbol_matcher, data))
- psymtab_to_symtab (objfile, ps);
+ {
+ struct compunit_symtab *symtab =
+ psymtab_to_symtab (objfile, ps);
+
+ if (expansion_notify != NULL)
+ expansion_notify (symtab, data);
+ }
}
}
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c
index 92d0013..e0600a9 100644
--- a/gdb/symfile-debug.c
+++ b/gdb/symfile-debug.c
@@ -281,22 +281,25 @@ debug_qf_expand_symtabs_matching
(struct objfile *objfile,
expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind, void *data)
{
const struct debug_sym_fns_data *debug_data =
objfile_data (objfile, symfile_debug_objfile_data_key);
fprintf_filtered (gdb_stdlog,
- "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",
+ "qf->expand_symtabs_matching (%s, %s, %s, %s, %s, %s)\n",
objfile_debug_name (objfile),
host_address_to_string (file_matcher),
host_address_to_string (symbol_matcher),
+ host_address_to_string (expansion_notify),
search_domain_name (kind),
host_address_to_string (data));
debug_data->real_sf->qf->expand_symtabs_matching (objfile,
file_matcher,
symbol_matcher,
+ expansion_notify,
kind, data);
}
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 96c7951..5ae5000 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -3941,6 +3941,7 @@ symfile_free_objfile (struct objfile *objfile)
void
expand_symtabs_matching (expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind,
void *data)
{
@@ -3950,7 +3951,8 @@ expand_symtabs_matching (expand_symtabs_file_matcher_ftype *file_matcher,
{
if (objfile->sf)
objfile->sf->qf->expand_symtabs_matching (objfile, file_matcher,
- symbol_matcher, kind,
+ symbol_matcher,
+ expansion_notify, kind,
data);
}
}
diff --git a/gdb/symfile.h b/gdb/symfile.h
index 380bd0e..d5ae4ad 100644
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
@@ -137,6 +137,12 @@ typedef int (expand_symtabs_file_matcher_ftype) (const char *filename,
typedef int (expand_symtabs_symbol_matcher_ftype) (const char *name,
void *data);
+/* Callback for quick_symbol_functions->expand_symtabs_matching
+ to be called after a symtab has been expanded. */
+
+typedef void (expand_symtabs_exp_notify_ftype) \
+ (struct compunit_symtab *symtab, void *data);
+
/* The "quick" symbol functions exist so that symbol readers can
avoiding an initial read of all the symbols. For example, symbol
readers might choose to use the "partial symbol table" utilities,
@@ -282,6 +288,7 @@ struct quick_symbol_functions
(struct objfile *objfile,
expand_symtabs_file_matcher_ftype *file_matcher,
expand_symtabs_symbol_matcher_ftype *symbol_matcher,
+ expand_symtabs_exp_notify_ftype *expansion_notify,
enum search_domain kind,
void *data);
@@ -569,6 +576,7 @@ extern struct cleanup *increment_reading_symtab (void);
void expand_symtabs_matching (expand_symtabs_file_matcher_ftype *,
expand_symtabs_symbol_matcher_ftype *,
+ expand_symtabs_exp_notify_ftype *,
enum search_domain kind, void *data);
void map_symbol_filenames (symbol_filename_ftype *fun, void *data,
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 5c6b626..bee07ac 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -926,7 +926,7 @@ maintenance_expand_symtabs (char *args, int from_tty)
{
objfile->sf->qf->expand_symtabs_matching
(objfile, maintenance_expand_file_matcher,
- maintenance_expand_name_matcher, ALL_DOMAIN, regexp);
+ maintenance_expand_name_matcher, NULL, ALL_DOMAIN, regexp);
}
}
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 321241b..47aea76 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -4521,7 +4521,7 @@ search_symbols (const char *regexp, enum search_domain kind,
? NULL
: search_symbols_file_matches),
search_symbols_name_matches,
- kind, &datum);
+ NULL, kind, &datum);
/* Here, we search through the minimal symbol tables for functions
and variables that match, and force their symbols to be read.
@@ -5309,8 +5309,8 @@ default_make_symbol_completion_list_break_on (const char *text,
/* Look through the partial symtabs for all symbols which begin
by matching SYM_TEXT. Expand all CUs that you find to the list.
The real names will get added by COMPLETION_LIST_ADD_SYMBOL below. */
- expand_symtabs_matching (NULL, symbol_completion_matcher, ALL_DOMAIN,
- &datum);
+ expand_symtabs_matching (NULL, symbol_completion_matcher, NULL,
+ ALL_DOMAIN, &datum);
/* At this point scan through the misc symbol vectors and add each
symbol you find to the list. Eventually we want to ignore