diff options
author | Tom Tromey <tom@tromey.com> | 2019-10-23 09:46:25 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2020-01-26 16:40:21 -0700 |
commit | 0494dbecdfa0b0b9065393755a1ac64431997da1 (patch) | |
tree | 62a9775a68571e89257e1ac2b0d1a88ac55526c0 | |
parent | 8566b89b737eef50f67bf23329b4606cf7973de1 (diff) | |
download | gdb-0494dbecdfa0b0b9065393755a1ac64431997da1.zip gdb-0494dbecdfa0b0b9065393755a1ac64431997da1.tar.gz gdb-0494dbecdfa0b0b9065393755a1ac64431997da1.tar.bz2 |
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
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/dbxread.c | 27 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 20 | ||||
-rw-r--r-- | gdb/mdebugread.c | 19 | ||||
-rw-r--r-- | gdb/psympriv.h | 3 | ||||
-rw-r--r-- | gdb/psymtab.c | 26 | ||||
-rw-r--r-- | gdb/xcoffread.c | 30 |
7 files changed, 48 insertions, 90 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c6a0251..69f2689 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 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. Call expand_psymtab. (xcoff_read_symtab): Call expand_psymtab. diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 2711ea8..99f47c0 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -2068,33 +2068,10 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst, 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. */ { diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index c3e0866..dafe01d 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9663,29 +9663,11 @@ void 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; diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 1d0a0fc..5d2fbcd 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -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. 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. */ diff --git a/gdb/psympriv.h b/gdb/psympriv.h index ae98a69..e4b2330 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -134,6 +134,9 @@ struct partial_symtab 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 { diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 6abc829..c020d15 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -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 psymtab_storage::discard_psymtab (struct partial_symtab *pst) { diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 1c0db67..b7da3f9 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1819,36 +1819,10 @@ find_linenos (struct bfd *abfd, struct bfd_section *asect, void *vpinfo) 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) { |