mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-28 01:50:48 +00:00
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:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user