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.
This commit is contained in:
Tom Tromey 2021-04-17 09:35:04 -06:00
parent 03a8ea51c3
commit 3bfa51a75f
11 changed files with 66 additions and 18 deletions

View file

@ -1,3 +1,30 @@
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> 2021-04-17 Tom Tromey <tom@tromey.com>
* symtab.c (global_symbol_searcher::expand_symtabs) * symtab.c (global_symbol_searcher::expand_symtabs)

View file

@ -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_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
domain_enum domain,
enum search_domain kind) override; 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_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
domain_enum domain,
enum search_domain kind) override; 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_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
domain_enum domain,
enum search_domain kind) enum search_domain kind)
{ {
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
@ -5398,8 +5401,10 @@ public:
dw2_debug_names_iterator (const mapped_debug_names &map, dw2_debug_names_iterator (const mapped_debug_names &map,
search_domain search, uint32_t namei, 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_map (map),
m_domain (domain),
m_search (search), m_search (search),
m_addr (find_vec_in_debug_names (map, namei, per_objfile)), m_addr (find_vec_in_debug_names (map, namei, per_objfile)),
m_per_objfile (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_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
domain_enum domain,
enum search_domain kind) enum search_domain kind)
{ {
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile); 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 /* The name was matched, now expand corresponding CUs that were
marked. */ 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; struct dwarf2_per_cu_data *per_cu;
while ((per_cu = iter.next ()) != NULL) while ((per_cu = iter.next ()) != NULL)

View file

@ -1172,6 +1172,7 @@ iterate_over_all_matching_symtabs
objfile->expand_symtabs_matching (NULL, &lookup_name, NULL, NULL, objfile->expand_symtabs_matching (NULL, &lookup_name, NULL, NULL,
(SEARCH_GLOBAL_BLOCK (SEARCH_GLOBAL_BLOCK
| SEARCH_STATIC_BLOCK), | SEARCH_STATIC_BLOCK),
UNDEF_DOMAIN,
search_domain); search_domain);
for (compunit_symtab *cu : objfile->compunits ()) for (compunit_symtab *cu : objfile->compunits ())

View file

@ -609,6 +609,7 @@ public:
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
domain_enum domain,
enum search_domain kind); enum search_domain kind);
/* See quick_symbol_functions. */ /* See quick_symbol_functions. */

View file

@ -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_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
domain_enum domain,
enum search_domain kind) override; enum search_domain kind) override;
struct compunit_symtab *find_pc_sect_compunit_symtab struct compunit_symtab *find_pc_sect_compunit_symtab

View file

@ -1208,7 +1208,8 @@ recursively_search_psymtabs
(struct partial_symtab *ps, (struct partial_symtab *ps,
struct objfile *objfile, struct objfile *objfile,
block_search_flags search_flags, block_search_flags search_flags,
enum search_domain domain, domain_enum domain,
enum search_domain search,
const lookup_name_info &lookup_name, const lookup_name_info &lookup_name,
gdb::function_view<expand_symtabs_symbol_matcher_ftype> sym_matcher) gdb::function_view<expand_symtabs_symbol_matcher_ftype> sym_matcher)
{ {
@ -1230,7 +1231,7 @@ recursively_search_psymtabs
continue; continue;
r = recursively_search_psymtabs (ps->dependencies[i], r = recursively_search_psymtabs (ps->dependencies[i],
objfile, search_flags, domain, objfile, search_flags, domain, search,
lookup_name, sym_matcher); lookup_name, sym_matcher);
if (r != 0) if (r != 0)
{ {
@ -1278,16 +1279,19 @@ recursively_search_psymtabs
{ {
QUIT; QUIT;
if ((domain == ALL_DOMAIN if ((domain == UNDEF_DOMAIN
|| (domain == MODULES_DOMAIN || symbol_matches_domain ((*psym)->ginfo.language (),
&& (*psym)->domain == MODULE_DOMAIN) (*psym)->domain, domain))
|| (domain == VARIABLES_DOMAIN && (search == ALL_DOMAIN
&& (*psym)->aclass != LOC_TYPEDEF || (search == MODULES_DOMAIN
&& (*psym)->aclass != LOC_BLOCK) && (*psym)->domain == MODULE_DOMAIN)
|| (domain == FUNCTIONS_DOMAIN || (search == VARIABLES_DOMAIN
&& (*psym)->aclass == LOC_BLOCK) && (*psym)->aclass != LOC_TYPEDEF
|| (domain == TYPES_DOMAIN && (*psym)->aclass != LOC_BLOCK)
&& (*psym)->aclass == LOC_TYPEDEF)) || (search == FUNCTIONS_DOMAIN
&& (*psym)->aclass == LOC_BLOCK)
|| (search == TYPES_DOMAIN
&& (*psym)->aclass == LOC_TYPEDEF))
&& psymbol_name_matches (*psym, lookup_name) && psymbol_name_matches (*psym, lookup_name)
&& (sym_matcher == NULL && (sym_matcher == NULL
|| sym_matcher ((*psym)->ginfo.search_name ()))) || 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_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
enum search_domain domain) domain_enum domain,
enum search_domain search)
{ {
/* Clear the search flags. */ /* Clear the search flags. */
for (partial_symtab *ps : require_partial_symbols (objfile)) for (partial_symtab *ps : require_partial_symbols (objfile))
@ -1353,7 +1358,8 @@ psymbol_functions::expand_symtabs_matching
} }
if ((symbol_matcher == NULL && lookup_name == NULL) 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, *psym_lookup_name,
symbol_matcher)) symbol_matcher))
{ {

View file

@ -202,7 +202,8 @@ struct quick_symbol_functions
Otherwise, individual symbols are considered. 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. 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_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
domain_enum domain,
enum search_domain kind) = 0; enum search_domain kind) = 0;
/* Return the comp unit from OBJFILE that contains PC and /* Return the comp unit from OBJFILE that contains PC and

View file

@ -272,6 +272,7 @@ objfile::expand_symtabs_matching
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
block_search_flags search_flags, block_search_flags search_flags,
domain_enum domain,
enum search_domain kind) enum search_domain kind)
{ {
if (debug_symfile) if (debug_symfile)
@ -286,7 +287,7 @@ objfile::expand_symtabs_matching
for (const auto &iter : qf) for (const auto &iter : qf)
if (!iter->expand_symtabs_matching (this, file_matcher, lookup_name, if (!iter->expand_symtabs_matching (this, file_matcher, lookup_name,
symbol_matcher, expansion_notify, symbol_matcher, expansion_notify,
search_flags, kind)) search_flags, domain, kind))
return false; return false;
return true; return true;
} }

View file

@ -3731,6 +3731,7 @@ expand_symtabs_matching
symbol_matcher, symbol_matcher,
expansion_notify, expansion_notify,
search_flags, search_flags,
UNDEF_DOMAIN,
kind)) kind))
return false; return false;
return true; return true;

View file

@ -939,6 +939,7 @@ maintenance_expand_symtabs (const char *args, int from_tty)
NULL, NULL,
NULL, NULL,
SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK, SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
UNDEF_DOMAIN,
ALL_DOMAIN); ALL_DOMAIN);
} }

View file

@ -4548,6 +4548,7 @@ global_symbol_searcher::expand_symtabs
}, },
NULL, NULL,
SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK, SEARCH_GLOBAL_BLOCK | SEARCH_STATIC_BLOCK,
UNDEF_DOMAIN,
kind); kind);
/* Here, we search through the minimal symbol tables for functions and /* Here, we search through the minimal symbol tables for functions and