gdb: add new function quick_symbol_functions::has_unexpanded_symbols
Adds a new function to the quick_symbol_functions API to let us know if there are any unexpanded symbols. This functionality is required by a later commit. After this commit the functionality is unused, and untested. The new function objfile::has_unexpanded_symtabs is added to the symfile-debug.c file which is a little strange, but this is (currently) where many of the other objfile::* functions (that call onto the quick_symbol_functions) are defined, so I'm reluctant to break this pattern. There should be no user visible changes after this commit. gdb/ChangeLog: * dwarf2/read.c (struct dwarf2_base_index_functions) <has_unexpanded_symtabs>: Declare. (dwarf2_base_index_functions::has_unexpanded_symtabs): Define new function. * objfiles.h (struct objfile) <has_unexpanded_symtabs>: Declare. * psympriv.h (struct psymbol_functions) <has_unexpanded_symtabs>: Declare. * psymtab.c (psymbol_functions::has_unexpanded_symtabs): Define new function. * quick-symbol.h (struct quick_symbol_functions) <has_unexpanded_symtabs>: Declare. * symfile-debug.c (objfile::has_unexpanded_symtabs): Define new function.
This commit is contained in:
parent
d038ce48f1
commit
fc4d5ebf8f
7 changed files with 95 additions and 0 deletions
|
@ -1,3 +1,19 @@
|
|||
2021-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* dwarf2/read.c (struct dwarf2_base_index_functions)
|
||||
<has_unexpanded_symtabs>: Declare.
|
||||
(dwarf2_base_index_functions::has_unexpanded_symtabs): Define new
|
||||
function.
|
||||
* objfiles.h (struct objfile) <has_unexpanded_symtabs>: Declare.
|
||||
* psympriv.h (struct psymbol_functions) <has_unexpanded_symtabs>:
|
||||
Declare.
|
||||
* psymtab.c (psymbol_functions::has_unexpanded_symtabs): Define
|
||||
new function.
|
||||
* quick-symbol.h (struct quick_symbol_functions)
|
||||
<has_unexpanded_symtabs>: Declare.
|
||||
* symfile-debug.c (objfile::has_unexpanded_symtabs): Define new
|
||||
function.
|
||||
|
||||
2021-06-25 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* infcall.c (call_function_by_hand_dummy): Add missing 'else' when
|
||||
|
|
|
@ -2024,6 +2024,8 @@ struct dwarf2_base_index_functions : public quick_symbol_functions
|
|||
{
|
||||
bool has_symbols (struct objfile *objfile) override;
|
||||
|
||||
bool has_unexpanded_symtabs (struct objfile *objfile) override;
|
||||
|
||||
struct symtab *find_last_source_symtab (struct objfile *objfile) override;
|
||||
|
||||
void forget_cached_source_info (struct objfile *objfile) override;
|
||||
|
@ -4470,6 +4472,26 @@ dwarf2_base_index_functions::has_symbols (struct objfile *objfile)
|
|||
return true;
|
||||
}
|
||||
|
||||
/* See quick_symbol_functions::has_unexpanded_symtabs in quick-symbol.h. */
|
||||
|
||||
bool
|
||||
dwarf2_base_index_functions::has_unexpanded_symtabs (struct objfile *objfile)
|
||||
{
|
||||
dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
|
||||
|
||||
for (const auto &per_cu : per_objfile->per_bfd->all_comp_units)
|
||||
{
|
||||
/* Is this already expanded? */
|
||||
if (per_objfile->symtab_set_p (per_cu.get ()))
|
||||
continue;
|
||||
|
||||
/* It has not yet been expanded. */
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* DWARF-5 debug_names reader. */
|
||||
|
||||
/* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension. */
|
||||
|
|
|
@ -565,6 +565,12 @@ public:
|
|||
|
||||
bool has_partial_symbols ();
|
||||
|
||||
/* Return true if this objfile has any unexpanded symbols. A return
|
||||
value of false indicates either, that this objfile has all its
|
||||
symbols fully expanded (i.e. fully read in), or that this objfile has
|
||||
no symbols at all (i.e. no debug information). */
|
||||
bool has_unexpanded_symtabs ();
|
||||
|
||||
/* See quick_symbol_functions. */
|
||||
struct symtab *find_last_source_symtab ();
|
||||
|
||||
|
|
|
@ -503,6 +503,8 @@ struct psymbol_functions : public quick_symbol_functions
|
|||
|
||||
bool has_symbols (struct objfile *objfile) override;
|
||||
|
||||
bool has_unexpanded_symtabs (struct objfile *objfile) override;
|
||||
|
||||
struct symtab *find_last_source_symtab (struct objfile *objfile) override;
|
||||
|
||||
void forget_cached_source_info (struct objfile *objfile) override;
|
||||
|
|
|
@ -1184,6 +1184,24 @@ psymbol_functions::has_symbols (struct objfile *objfile)
|
|||
return m_partial_symtabs->psymtabs != NULL;
|
||||
}
|
||||
|
||||
/* See quick_symbol_functions::has_unexpanded_symtabs in quick-symbol.h. */
|
||||
|
||||
bool
|
||||
psymbol_functions::has_unexpanded_symtabs (struct objfile *objfile)
|
||||
{
|
||||
for (partial_symtab *psymtab : require_partial_symbols (objfile))
|
||||
{
|
||||
/* Is this already expanded? */
|
||||
if (psymtab->readin_p (objfile))
|
||||
continue;
|
||||
|
||||
/* It has not yet been expanded. */
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Helper function for psym_find_compunit_symtab_by_address that fills
|
||||
in m_psymbol_map for a given range of psymbols. */
|
||||
|
||||
|
|
|
@ -86,6 +86,12 @@ struct quick_symbol_functions
|
|||
available. */
|
||||
virtual bool has_symbols (struct objfile *objfile) = 0;
|
||||
|
||||
/* Return true if OBJFILE has any unexpanded symtabs. A return value of
|
||||
false indicates there are no unexpanded symtabs, this might mean that
|
||||
all of the symtabs have been expanded (full debug has been read in),
|
||||
or it might been that OBJFILE has no debug information. */
|
||||
virtual bool has_unexpanded_symtabs (struct objfile *objfile) = 0;
|
||||
|
||||
/* Return the symbol table for the "last" file appearing in
|
||||
OBJFILE. */
|
||||
virtual struct symtab *find_last_source_symtab (struct objfile *objfile) = 0;
|
||||
|
|
|
@ -100,6 +100,31 @@ objfile::has_partial_symbols ()
|
|||
return retval;
|
||||
}
|
||||
|
||||
/* See objfiles.h. */
|
||||
bool
|
||||
objfile::has_unexpanded_symtabs ()
|
||||
{
|
||||
if (debug_symfile)
|
||||
fprintf_filtered (gdb_stdlog, "qf->has_unexpanded_symtabs (%s)\n",
|
||||
objfile_debug_name (this));
|
||||
|
||||
bool result = false;
|
||||
for (const auto &iter : qf)
|
||||
{
|
||||
if (iter->has_unexpanded_symtabs (this))
|
||||
{
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (debug_symfile)
|
||||
fprintf_filtered (gdb_stdlog, "qf->has_unexpanded_symtabs (%s) = %d\n",
|
||||
objfile_debug_name (this), (result ? 1 : 0));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
struct symtab *
|
||||
objfile::find_last_source_symtab ()
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue