mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2026-08-27 00:26:02 -04:00
Have expand_symtabs_matching work for already-expanded CUs
Currently, gdb will search the already-expanded symtabs in one loop, and then also expand matching symtabs in another loop. However, this is somewhat inefficient -- when searching the already-expanded symtabs, all such symtabs are examined. However, the various "quick" implementations already know which subset of symtabs might have a match. This changes the contract of expand_symtabs_matching to also call the callback for an already-expanded symtab. With this change, and some subsequent enabling changes, the number of searched symtabs should sometimes be reduced. This also cuts down on the amount of redundant code. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16994 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16998 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30736 Acked-By: Simon Marchi <simon.marchi@efficios.com>
This commit is contained in:
parent
29fa4279c2
commit
f88f9f42db
2 changed files with 30 additions and 17 deletions
|
|
@ -1535,6 +1535,31 @@ struct readnow_functions : public dwarf2_base_index_functions
|
|||
domain_search_flags domain,
|
||||
expand_symtabs_lang_matcher lang_matcher) override
|
||||
{
|
||||
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
|
||||
auto_bool_vector cus_to_skip;
|
||||
dw_expand_symtabs_matching_file_matcher (per_objfile, cus_to_skip,
|
||||
file_matcher);
|
||||
|
||||
for (const auto &per_cu : per_objfile->per_bfd->all_units)
|
||||
{
|
||||
QUIT;
|
||||
|
||||
/* Skip various types of unit that should not be searched
|
||||
directly: partial units and dummy units. */
|
||||
if (/* Note that we request the non-strict unit type here. If
|
||||
there was an error while reading, like in
|
||||
dw-form-strx-out-of-bounds.exp, then the unit type may
|
||||
not be set. */
|
||||
per_cu->unit_type (false) == DW_UT_partial
|
||||
|| per_cu->unit_type (false) == 0
|
||||
|| per_objfile->get_symtab (per_cu.get ()) == nullptr)
|
||||
continue;
|
||||
if (!dw2_expand_symtabs_matching_one (per_cu.get (), per_objfile,
|
||||
cus_to_skip, file_matcher,
|
||||
expansion_notify,
|
||||
lang_matcher))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
@ -1992,13 +2017,15 @@ dw2_expand_symtabs_matching_one
|
|||
return true;
|
||||
}
|
||||
|
||||
bool symtab_was_null = !per_objfile->symtab_set_p (per_cu);
|
||||
compunit_symtab *symtab
|
||||
= dw2_instantiate_symtab (per_cu, per_objfile, false);
|
||||
gdb_assert (symtab != nullptr);
|
||||
|
||||
if (expansion_notify != NULL && symtab_was_null)
|
||||
return expansion_notify (symtab);
|
||||
if (expansion_notify != nullptr)
|
||||
{
|
||||
cus_to_skip.set (per_cu->index, true);
|
||||
return expansion_notify (symtab);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -2030,13 +2057,6 @@ dw_expand_symtabs_matching_file_matcher
|
|||
continue;
|
||||
}
|
||||
|
||||
/* We only need to look at symtabs not already expanded. */
|
||||
if (per_objfile->symtab_set_p (per_cu.get ()))
|
||||
{
|
||||
cus_to_skip.set (per_cu->index, true);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (per_cu->fnd != nullptr)
|
||||
{
|
||||
file_and_directory *fnd = per_cu->fnd.get ();
|
||||
|
|
@ -14675,10 +14695,6 @@ cooked_index_functions::expand_symtabs_matching
|
|||
{
|
||||
QUIT;
|
||||
|
||||
/* No need to consider symbols from expanded CUs. */
|
||||
if (per_objfile->symtab_set_p (entry->per_cu))
|
||||
continue;
|
||||
|
||||
/* We don't need to consider symbols from some CUs. */
|
||||
if (cus_to_skip.is_set (entry->per_cu->index))
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -914,9 +914,6 @@ psymbol_functions::expand_symtabs_matching
|
|||
{
|
||||
QUIT;
|
||||
|
||||
if (ps->readin_p (objfile))
|
||||
continue;
|
||||
|
||||
if (file_matcher)
|
||||
{
|
||||
bool match;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue