[binutils-gdb] Add 'domain' parameter to expand_symtabs_matching
Tom Tromey
tromey@sourceware.org
Sat Apr 17 15:39:50 GMT 2021
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3bfa51a75fc18775ea043efb248d0e2c35103202
commit 3bfa51a75fc18775ea043efb248d0e2c35103202
Author: Tom Tromey <tom@tromey.com>
Date: Sat Apr 17 09:35:04 2021 -0600
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.
Diff:
---
gdb/ChangeLog | 27 +++++++++++++++++++++++++++
gdb/dwarf2/read.c | 10 ++++++++--
gdb/linespec.c | 1 +
gdb/objfiles.h | 1 +
gdb/psympriv.h | 1 +
gdb/psymtab.c | 34 ++++++++++++++++++++--------------
gdb/quick-symbol.h | 4 +++-
gdb/symfile-debug.c | 3 ++-
gdb/symfile.c | 1 +
gdb/symmisc.c | 1 +
gdb/symtab.c | 1 +
11 files changed, 66 insertions(+), 18 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3d27f68b93c..31af446c5b6 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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>
* symtab.c (global_symbol_searcher::expand_symtabs)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 824945a95bc..43d276f4736 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 f37861b343a..03a11fda214 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 9a194c1d8d4..ec64b1c3a98 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 70a397f8167..25f3fe500fa 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 c3461168294..c766107504d 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 3332d329e02..4c0ef735472 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 b1763243534..577b0fcd86c 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 5f83cbf67c8..7dfe1ee1ca0 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 33657f88fa9..d992c671635 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 a34207fc74b..274ddfd1dae 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
More information about the Gdb-cvs
mailing list