mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
Consolidate partial symtab dependency reading
Most of the symbol readers have code to iterate over a partial symtabs dependencies, expanding each one and optionally printing a message. Now that the "second-stage" psymtab expansion is available as a method, these implementations can all be merged. This patch also changes a couple more warnings into assertions. gdb/ChangeLog 2020-01-26 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_psymtab_to_symtab_1): Call read_dependencies. Add assert. * psymtab.c (partial_symtab::read_dependencies): New method. * psympriv.h (struct partial_symtab) <read_dependencies>: New method. * mdebugread.c (psymtab_to_symtab_1): Call read_dependencies. * dwarf2read.c (dwarf2_psymtab::expand_psymtab): Call read_dependencies. * dbxread.c (dbx_psymtab_to_symtab_1): Call read_dependencies. Add assert. Change-Id: I8151e05677794e90223edc1a4cb70f7f69137d46
This commit is contained in:
parent
8566b89b73
commit
0494dbecdf
@ -1,3 +1,16 @@
|
|||||||
|
2020-01-26 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* xcoffread.c (xcoff_psymtab_to_symtab_1): Call
|
||||||
|
read_dependencies. Add assert.
|
||||||
|
* psymtab.c (partial_symtab::read_dependencies): New method.
|
||||||
|
* psympriv.h (struct partial_symtab) <read_dependencies>: New
|
||||||
|
method.
|
||||||
|
* mdebugread.c (psymtab_to_symtab_1): Call read_dependencies.
|
||||||
|
* dwarf2read.c (dwarf2_psymtab::expand_psymtab): Call
|
||||||
|
read_dependencies.
|
||||||
|
* dbxread.c (dbx_psymtab_to_symtab_1): Call read_dependencies.
|
||||||
|
Add assert.
|
||||||
|
|
||||||
2020-01-26 Tom Tromey <tom@tromey.com>
|
2020-01-26 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* xcoffread.c (xcoff_psymtab_to_symtab_1): Change argument order.
|
* xcoffread.c (xcoff_psymtab_to_symtab_1): Change argument order.
|
||||||
|
@ -2068,33 +2068,10 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
|
|||||||
static void
|
static void
|
||||||
dbx_psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile)
|
dbx_psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile)
|
||||||
{
|
{
|
||||||
int i;
|
gdb_assert (!pst->readin);
|
||||||
|
|
||||||
if (pst->readin)
|
|
||||||
{
|
|
||||||
fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. "
|
|
||||||
"Shouldn't happen.\n",
|
|
||||||
pst->filename);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read in all partial symtabs on which this one is dependent. */
|
/* Read in all partial symtabs on which this one is dependent. */
|
||||||
for (i = 0; i < pst->number_of_dependencies; i++)
|
pst->read_dependencies (objfile);
|
||||||
if (!pst->dependencies[i]->readin)
|
|
||||||
{
|
|
||||||
/* Inform about additional files that need to be read in. */
|
|
||||||
if (info_verbose)
|
|
||||||
{
|
|
||||||
fputs_filtered (" ", gdb_stdout);
|
|
||||||
wrap_here ("");
|
|
||||||
fputs_filtered ("and ", gdb_stdout);
|
|
||||||
wrap_here ("");
|
|
||||||
printf_filtered ("%s...", pst->dependencies[i]->filename);
|
|
||||||
wrap_here (""); /* Flush output. */
|
|
||||||
gdb_flush (gdb_stdout);
|
|
||||||
}
|
|
||||||
pst->dependencies[i]->expand_psymtab (objfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */
|
if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */
|
||||||
{
|
{
|
||||||
|
@ -9663,29 +9663,11 @@ void
|
|||||||
dwarf2_psymtab::expand_psymtab (struct objfile *objfile)
|
dwarf2_psymtab::expand_psymtab (struct objfile *objfile)
|
||||||
{
|
{
|
||||||
struct dwarf2_per_cu_data *per_cu;
|
struct dwarf2_per_cu_data *per_cu;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (readin)
|
if (readin)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0; i < number_of_dependencies; i++)
|
read_dependencies (objfile);
|
||||||
if (!dependencies[i]->readin
|
|
||||||
&& dependencies[i]->user == NULL)
|
|
||||||
{
|
|
||||||
/* Inform about additional files that need to be read in. */
|
|
||||||
if (info_verbose)
|
|
||||||
{
|
|
||||||
/* FIXME: i18n: Need to make this a single string. */
|
|
||||||
fputs_filtered (" ", gdb_stdout);
|
|
||||||
wrap_here ("");
|
|
||||||
fputs_filtered ("and ", gdb_stdout);
|
|
||||||
wrap_here ("");
|
|
||||||
printf_filtered ("%s...", dependencies[i]->filename);
|
|
||||||
wrap_here (""); /* Flush output. */
|
|
||||||
gdb_flush (gdb_stdout);
|
|
||||||
}
|
|
||||||
dependencies[i]->expand_psymtab (objfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
per_cu = per_cu_data;
|
per_cu = per_cu_data;
|
||||||
|
|
||||||
|
@ -3856,24 +3856,7 @@ psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile)
|
|||||||
/* Read in all partial symtabs on which this one is dependent.
|
/* Read in all partial symtabs on which this one is dependent.
|
||||||
NOTE that we do have circular dependencies, sigh. We solved
|
NOTE that we do have circular dependencies, sigh. We solved
|
||||||
that by setting pst->readin before this point. */
|
that by setting pst->readin before this point. */
|
||||||
|
pst->read_dependencies (objfile);
|
||||||
for (i = 0; i < pst->number_of_dependencies; i++)
|
|
||||||
if (!pst->dependencies[i]->readin)
|
|
||||||
{
|
|
||||||
/* Inform about additional files to be read in. */
|
|
||||||
if (info_verbose)
|
|
||||||
{
|
|
||||||
fputs_filtered (" ", gdb_stdout);
|
|
||||||
wrap_here ("");
|
|
||||||
fputs_filtered ("and ", gdb_stdout);
|
|
||||||
wrap_here ("");
|
|
||||||
printf_filtered ("%s...",
|
|
||||||
pst->dependencies[i]->filename);
|
|
||||||
wrap_here (""); /* Flush output */
|
|
||||||
gdb_flush (gdb_stdout);
|
|
||||||
}
|
|
||||||
pst->dependencies[i]->expand_psymtab (objfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do nothing if this is a dummy psymtab. */
|
/* Do nothing if this is a dummy psymtab. */
|
||||||
|
|
||||||
|
@ -134,6 +134,9 @@ struct partial_symtab
|
|||||||
expand_psymtab can be made. */
|
expand_psymtab can be made. */
|
||||||
virtual void expand_psymtab (struct objfile *) = 0;
|
virtual void expand_psymtab (struct objfile *) = 0;
|
||||||
|
|
||||||
|
/* Ensure that all the dependencies are read in. */
|
||||||
|
void read_dependencies (struct objfile *);
|
||||||
|
|
||||||
/* Return the raw low text address of this partial_symtab. */
|
/* Return the raw low text address of this partial_symtab. */
|
||||||
CORE_ADDR raw_text_low () const
|
CORE_ADDR raw_text_low () const
|
||||||
{
|
{
|
||||||
|
@ -1682,6 +1682,32 @@ partial_symtab::partial_symtab (const char *filename_, struct objfile *objfile)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See psympriv.h. */
|
||||||
|
|
||||||
|
void
|
||||||
|
partial_symtab::read_dependencies (struct objfile *objfile)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < number_of_dependencies; ++i)
|
||||||
|
{
|
||||||
|
if (!dependencies[i]->readin)
|
||||||
|
{
|
||||||
|
/* Inform about additional files to be read in. */
|
||||||
|
if (info_verbose)
|
||||||
|
{
|
||||||
|
fputs_filtered (" ", gdb_stdout);
|
||||||
|
wrap_here ("");
|
||||||
|
fputs_filtered ("and ", gdb_stdout);
|
||||||
|
wrap_here ("");
|
||||||
|
printf_filtered ("%s...", dependencies[i]->filename);
|
||||||
|
wrap_here (""); /* Flush output */
|
||||||
|
gdb_flush (gdb_stdout);
|
||||||
|
}
|
||||||
|
dependencies[i]->expand_psymtab (objfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
psymtab_storage::discard_psymtab (struct partial_symtab *pst)
|
psymtab_storage::discard_psymtab (struct partial_symtab *pst)
|
||||||
{
|
{
|
||||||
|
@ -1819,36 +1819,10 @@ find_linenos (struct bfd *abfd, struct bfd_section *asect, void *vpinfo)
|
|||||||
static void
|
static void
|
||||||
xcoff_psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile)
|
xcoff_psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile)
|
||||||
{
|
{
|
||||||
int i;
|
gdb_assert (!pst->readin);
|
||||||
|
|
||||||
if (!pst)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (pst->readin)
|
|
||||||
{
|
|
||||||
fprintf_unfiltered
|
|
||||||
(gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
|
|
||||||
pst->filename);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read in all partial symtabs on which this one is dependent. */
|
/* Read in all partial symtabs on which this one is dependent. */
|
||||||
for (i = 0; i < pst->number_of_dependencies; i++)
|
pst->read_dependencies (objfile);
|
||||||
if (!pst->dependencies[i]->readin)
|
|
||||||
{
|
|
||||||
/* Inform about additional files that need to be read in. */
|
|
||||||
if (info_verbose)
|
|
||||||
{
|
|
||||||
fputs_filtered (" ", gdb_stdout);
|
|
||||||
wrap_here ("");
|
|
||||||
fputs_filtered ("and ", gdb_stdout);
|
|
||||||
wrap_here ("");
|
|
||||||
printf_filtered ("%s...", pst->dependencies[i]->filename);
|
|
||||||
wrap_here (""); /* Flush output */
|
|
||||||
gdb_flush (gdb_stdout);
|
|
||||||
}
|
|
||||||
pst->dependencies[i]->expand_psymtab (objfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (((struct symloc *) pst->read_symtab_private)->numsyms != 0)
|
if (((struct symloc *) pst->read_symtab_private)->numsyms != 0)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user