Document quick_symbol_functions::expand_symtabs_matching invariant

While working on my series to replace the DWARF psymbol reader, I
noticed that the expand_symtabs_matching has an undocumented
invariant.  I think that, if this invariant is not followed, then GDB
will crash.  So, this patch documents this in the relevant spots and
introduces some asserts to make it clear.

Regression tested on x86-64 Fedora 32.
This commit is contained in:
Tom Tromey
2021-06-21 14:10:41 -06:00
parent cc9d6997a5
commit 4f348ca808
4 changed files with 15 additions and 3 deletions

View File

@@ -4319,7 +4319,9 @@ dwarf2_gdb_index::expand_symtabs_matching
dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher);
if (symbol_matcher == NULL && lookup_name == NULL)
/* This invariant is documented in quick-functions.h. */
gdb_assert (lookup_name != nullptr || symbol_matcher == nullptr);
if (lookup_name == nullptr)
{
for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
{
@@ -5307,7 +5309,9 @@ dwarf2_debug_names_index::expand_symtabs_matching
dw_expand_symtabs_matching_file_matcher (per_objfile, file_matcher);
if (symbol_matcher == NULL && lookup_name == NULL)
/* This invariant is documented in quick-functions.h. */
gdb_assert (lookup_name != nullptr || symbol_matcher == nullptr);
if (lookup_name == nullptr)
{
for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
{

View File

@@ -1130,6 +1130,9 @@ psymbol_functions::expand_symtabs_matching
if (lookup_name != nullptr)
psym_lookup_name = lookup_name->make_ignore_params ();
/* This invariant is documented in quick-functions.h. */
gdb_assert (lookup_name != nullptr || symbol_matcher == nullptr);
for (partial_symtab *ps : m_partial_symtabs->range ())
{
QUIT;
@@ -1157,7 +1160,7 @@ psymbol_functions::expand_symtabs_matching
continue;
}
if ((symbol_matcher == NULL && lookup_name == NULL)
if (lookup_name == nullptr
|| recursively_search_psymtabs (ps, objfile, search_flags,
domain, search,
*psym_lookup_name,

View File

@@ -167,6 +167,8 @@ struct quick_symbol_functions
If the symbol name does not match LOOKUP_NAME, the symbol is skipped.
If SYMBOL_MATCHER returns false, then the symbol is skipped.
Note that if SYMBOL_MATCHER is non-NULL, then LOOKUP_NAME must
also be provided.
Otherwise, the symbol's symbol table is expanded and the
notification function is called. If the notification function

View File

@@ -405,6 +405,9 @@ objfile::expand_symtabs_matching
domain_enum domain,
enum search_domain kind)
{
/* This invariant is documented in quick-functions.h. */
gdb_assert (lookup_name != nullptr || symbol_matcher == nullptr);
if (debug_symfile)
fprintf_filtered (gdb_stdlog,
"qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",