+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>
* xcoffread.c (xcoff_psymtab_to_symtab_1): Change argument order.
static void
dbx_psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile)
{
- int i;
-
- if (pst->readin)
- {
- fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in. "
- "Shouldn't happen.\n",
- pst->filename);
- return;
- }
+ gdb_assert (!pst->readin);
/* Read in all partial symtabs on which this one is dependent. */
- for (i = 0; i < pst->number_of_dependencies; i++)
- 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);
- }
+ pst->read_dependencies (objfile);
if (LDSYMLEN (pst)) /* Otherwise it's a dummy. */
{
dwarf2_psymtab::expand_psymtab (struct objfile *objfile)
{
struct dwarf2_per_cu_data *per_cu;
- int i;
if (readin)
return;
- for (i = 0; i < number_of_dependencies; i++)
- 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);
- }
+ read_dependencies (objfile);
per_cu = per_cu_data;
/* Read in all partial symtabs on which this one is dependent.
NOTE that we do have circular dependencies, sigh. We solved
that by setting pst->readin before this point. */
-
- 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);
- }
+ pst->read_dependencies (objfile);
/* Do nothing if this is a dummy psymtab. */
expand_psymtab can be made. */
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. */
CORE_ADDR raw_text_low () const
{
}
}
+/* 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
psymtab_storage::discard_psymtab (struct partial_symtab *pst)
{
static void
xcoff_psymtab_to_symtab_1 (legacy_psymtab *pst, struct objfile *objfile)
{
- int i;
-
- if (!pst)
- return;
-
- if (pst->readin)
- {
- fprintf_unfiltered
- (gdb_stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
- pst->filename);
- return;
- }
+ gdb_assert (!pst->readin);
/* Read in all partial symtabs on which this one is dependent. */
- for (i = 0; i < pst->number_of_dependencies; i++)
- 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);
- }
+ pst->read_dependencies (objfile);
if (((struct symloc *) pst->read_symtab_private)->numsyms != 0)
{