diff options
author | Tom Tromey <tom@tromey.com> | 2021-04-17 09:35:04 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-04-17 09:35:05 -0600 |
commit | 3bfa51a75fc18775ea043efb248d0e2c35103202 (patch) | |
tree | 25e27a3c0ccf85f992657dde16c25277c163f0ac /gdb | |
parent | 03a8ea51c31d8f27ec717ddb1ff68f5f5d0732ab (diff) | |
download | gdb-3bfa51a75fc18775ea043efb248d0e2c35103202.zip gdb-3bfa51a75fc18775ea043efb248d0e2c35103202.tar.gz gdb-3bfa51a75fc18775ea043efb248d0e2c35103202.tar.bz2 |
Add 'domain' parameter to expand_symtabs_matching
Currently, expand_symtabs_matching only accepts a search_domain
parameter. However, lookup_symbol uses a domain_enum instead, and the
two, confusingly, do quite different things -- one cannot emulate the
other. So, this patch adds a domain_enum parameter to
expand_symtabs_matching, with UNDEF_DOMAIN used as a wildcard.
This is another step toward replacing lookup_symbol with
expand_symtabs_matching.
gdb/ChangeLog
2021-04-17 Tom Tromey <tom@tromey.com>
* symtab.c (global_symbol_searcher::expand_symtabs): Update.
* symmisc.c (maintenance_expand_symtabs): Update.
* symfile.c (expand_symtabs_matching): Update.
* symfile-debug.c (objfile::expand_symtabs_matching): Add 'domain'
parameter.
* quick-symbol.h (struct quick_symbol_functions)
<expand_symtabs_matching>: Add 'domain' parameter.
* psymtab.c (recursively_search_psymtabs)
(psymbol_functions::expand_symtabs_matching): Add 'domain'
parameter.
* psympriv.h (struct psymbol_functions) <expand_symtabs_matching>:
Add 'domain' parameter.
* objfiles.h (struct objfile) <expand_symtabs_matching>: Add
'domain' parameter.
* linespec.c (iterate_over_all_matching_symtabs): Update.
* dwarf2/read.c (struct dwarf2_gdb_index)
<expand_symtabs_matching>: Add 'domain' parameter.
(struct dwarf2_debug_names_index) <expand_symtabs_matching>: Add
'domain' parameter.
(dw2_expand_symtabs_matching)
(dwarf2_gdb_index::expand_symtabs_matching)
(dw2_debug_names_iterator)
(dwarf2_debug_names_index::expand_symtabs_matching): Add 'domain'
parameter.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 27 | ||||
-rw-r--r-- | gdb/dwarf2/read.c | 10 | ||||
-rw-r--r-- | gdb/linespec.c | 1 | ||||
-rw-r--r-- | gdb/objfiles.h | 1 | ||||
-rw-r--r-- | gdb/psympriv.h | 1 | ||||
-rw-r--r-- | gdb/psymtab.c | 34 | ||||
-rw-r--r-- | gdb/quick-symbol.h | 4 | ||||
-rw-r--r-- | gdb/symfile-debug.c | 3 | ||||
-rw-r--r-- | gdb/symfile.c | 1 | ||||
-rw-r--r-- | gdb/symmisc.c | 1 | ||||
-rw-r--r-- | gdb/symtab.c | 1 |
11 files changed, 66 insertions, 18 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3d27f68..31af446 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,32 @@ 2021-04-17 Tom Tromey <tom@tromey.com> + * symtab.c (global_symbol_searcher::expand_symtabs): Update. + * symmisc.c (maintenance_expand_symtabs): Update. + * symfile.c (expand_symtabs_matching): Update. + * symfile-debug.c (objfile::expand_symtabs_matching): Add 'domain' + parameter. + * quick-symbol.h (struct quick_symbol_functions) + <expand_symtabs_matching>: Add 'domain' parameter. + * psymtab.c (recursively_search_psymtabs) + (psymbol_functions::expand_symtabs_matching): Add 'domain' + parameter. + * psympriv.h (struct psymbol_functions) <expand_symtabs_matching>: + Add 'domain' parameter. + * objfiles.h (struct objfile) <expand_symtabs_matching>: Add + 'domain' parameter. + * linespec.c (iterate_over_all_matching_symtabs): Update. + * dwarf2/read.c (struct dwarf2_gdb_index) + <expand_symtabs_matching>: Add 'domain' parameter. + (struct dwarf2_debug_names_index) <expand_symtabs_matching>: Add + 'domain' parameter. + (dw2_expand_symtabs_matching) + (dwarf2_gdb_index::expand_symtabs_matching) + (dw2_debug_names_iterator) + (dwarf2_debug_names_index::expand_symtabs_matching): Add 'domain' + parameter. + +2021-04-17 Tom Tromey <tom@tromey.com> + * symtab.c (global_symbol_searcher::expand_symtabs) (default_collect_symbol_completion_matches_break_on): Update. * symmisc.c (maintenance_expand_symtabs): Update. diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 824945a..43d276f 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -2290,6 +2290,7 @@ struct dwarf2_gdb_index : public dwarf2_base_index_functions gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, + domain_enum domain, enum search_domain kind) override; }; @@ -2320,6 +2321,7 @@ struct dwarf2_debug_names_index : public dwarf2_base_index_functions gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, + domain_enum domain, enum search_domain kind) override; }; @@ -4878,6 +4880,7 @@ dwarf2_gdb_index::expand_symtabs_matching gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, + domain_enum domain, enum search_domain kind) { dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); @@ -5398,8 +5401,10 @@ public: dw2_debug_names_iterator (const mapped_debug_names &map, search_domain search, uint32_t namei, - dwarf2_per_objfile *per_objfile) + dwarf2_per_objfile *per_objfile, + domain_enum domain = UNDEF_DOMAIN) : m_map (map), + m_domain (domain), m_search (search), m_addr (find_vec_in_debug_names (map, namei, per_objfile)), m_per_objfile (per_objfile) @@ -5950,6 +5955,7 @@ dwarf2_debug_names_index::expand_symtabs_matching gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, + domain_enum domain, enum search_domain kind) { dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); @@ -5983,7 +5989,7 @@ dwarf2_debug_names_index::expand_symtabs_matching { /* The name was matched, now expand corresponding CUs that were marked. */ - dw2_debug_names_iterator iter (map, kind, namei, per_objfile); + dw2_debug_names_iterator iter (map, kind, namei, per_objfile, domain); struct dwarf2_per_cu_data *per_cu; while ((per_cu = iter.next ()) != NULL) diff --git a/gdb/linespec.c b/gdb/linespec.c index f37861b..03a11fd 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -1172,6 +1172,7 @@ iterate_over_all_matching_symtabs objfile->expand_symtabs_matching (NULL, &lookup_name, NULL, NULL, (SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK), + UNDEF_DOMAIN, search_domain); for (compunit_symtab *cu : objfile->compunits ()) diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 9a194c1..ec64b1c 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -609,6 +609,7 @@ public: gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, + domain_enum domain, enum search_domain kind); /* See quick_symbol_functions. */ diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 70a397f..25f3fe5 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -548,6 +548,7 @@ struct psymbol_functions : public quick_symbol_functions gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, + domain_enum domain, enum search_domain kind) override; struct compunit_symtab *find_pc_sect_compunit_symtab diff --git a/gdb/psymtab.c b/gdb/psymtab.c index c346116..c766107 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1208,7 +1208,8 @@ recursively_search_psymtabs (struct partial_symtab *ps, struct objfile *objfile, block_search_flags search_flags, - enum search_domain domain, + domain_enum domain, + enum search_domain search, const lookup_name_info &lookup_name, gdb::function_view<expand_symtabs_symbol_matcher_ftype> sym_matcher) { @@ -1230,7 +1231,7 @@ recursively_search_psymtabs continue; r = recursively_search_psymtabs (ps->dependencies[i], - objfile, search_flags, domain, + objfile, search_flags, domain, search, lookup_name, sym_matcher); if (r != 0) { @@ -1278,16 +1279,19 @@ recursively_search_psymtabs { QUIT; - if ((domain == ALL_DOMAIN - || (domain == MODULES_DOMAIN - && (*psym)->domain == MODULE_DOMAIN) - || (domain == VARIABLES_DOMAIN - && (*psym)->aclass != LOC_TYPEDEF - && (*psym)->aclass != LOC_BLOCK) - || (domain == FUNCTIONS_DOMAIN - && (*psym)->aclass == LOC_BLOCK) - || (domain == TYPES_DOMAIN - && (*psym)->aclass == LOC_TYPEDEF)) + if ((domain == UNDEF_DOMAIN + || symbol_matches_domain ((*psym)->ginfo.language (), + (*psym)->domain, domain)) + && (search == ALL_DOMAIN + || (search == MODULES_DOMAIN + && (*psym)->domain == MODULE_DOMAIN) + || (search == VARIABLES_DOMAIN + && (*psym)->aclass != LOC_TYPEDEF + && (*psym)->aclass != LOC_BLOCK) + || (search == FUNCTIONS_DOMAIN + && (*psym)->aclass == LOC_BLOCK) + || (search == TYPES_DOMAIN + && (*psym)->aclass == LOC_TYPEDEF)) && psymbol_name_matches (*psym, lookup_name) && (sym_matcher == NULL || sym_matcher ((*psym)->ginfo.search_name ()))) @@ -1315,7 +1319,8 @@ psymbol_functions::expand_symtabs_matching gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, - enum search_domain domain) + domain_enum domain, + enum search_domain search) { /* Clear the search flags. */ for (partial_symtab *ps : require_partial_symbols (objfile)) @@ -1353,7 +1358,8 @@ psymbol_functions::expand_symtabs_matching } if ((symbol_matcher == NULL && lookup_name == NULL) - || recursively_search_psymtabs (ps, objfile, search_flags, domain, + || recursively_search_psymtabs (ps, objfile, search_flags, + domain, search, *psym_lookup_name, symbol_matcher)) { diff --git a/gdb/quick-symbol.h b/gdb/quick-symbol.h index 3332d32..4c0ef73 100644 --- a/gdb/quick-symbol.h +++ b/gdb/quick-symbol.h @@ -202,7 +202,8 @@ struct quick_symbol_functions Otherwise, individual symbols are considered. - If KIND does not match, the symbol is skipped. + If DOMAIN or KIND do not match, the symbol is skipped. + If DOMAIN is UNDEF_DOMAIN, that is treated as a wildcard. If the symbol name does not match LOOKUP_NAME, the symbol is skipped. @@ -220,6 +221,7 @@ struct quick_symbol_functions gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, + domain_enum domain, enum search_domain kind) = 0; /* Return the comp unit from OBJFILE that contains PC and diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c index b176324..577b0fc 100644 --- a/gdb/symfile-debug.c +++ b/gdb/symfile-debug.c @@ -272,6 +272,7 @@ objfile::expand_symtabs_matching gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, block_search_flags search_flags, + domain_enum domain, enum search_domain kind) { if (debug_symfile) @@ -286,7 +287,7 @@ objfile::expand_symtabs_matching for (const auto &iter : qf) if (!iter->expand_symtabs_matching (this, file_matcher, lookup_name, symbol_matcher, expansion_notify, - search_flags, kind)) + search_flags, domain, kind)) return false; return true; } diff --git a/gdb/symfile.c b/gdb/symfile.c index 5f83cbf..7dfe1ee 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -3731,6 +3731,7 @@ expand_symtabs_matching symbol_matcher, expansion_notify, search_flags, + UNDEF_DOMAIN, kind)) return false; return true; diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 33657f8..d992c67 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -939,6 +939,7 @@ maintenance_expand_symtabs (const char *args, int from_tty) NULL, NULL, SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK, + UNDEF_DOMAIN, ALL_DOMAIN); } diff --git a/gdb/symtab.c b/gdb/symtab.c index a34207f..274ddfd 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -4548,6 +4548,7 @@ global_symbol_searcher::expand_symtabs }, NULL, SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK, + UNDEF_DOMAIN, kind); /* Here, we search through the minimal symbol tables for functions and |