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:
parent
03a8ea51c3
commit
3bfa51a75f
11 changed files with 66 additions and 18 deletions
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 ())
|
||||||
|
|
|
@ -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. */
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue