summaryrefslogtreecommitdiff
path: root/gdb/elfread.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-03-20 17:23:40 -0600
committerTom Tromey <tom@tromey.com>2021-03-20 17:23:46 -0600
commiteb36a3eb2f846b8d4b16c1bb114136961d0ce5bf (patch)
tree66db807b35c33f6ba4ab2406e19308ecd2ac4a29 /gdb/elfread.c
parente11145903f25b7ac91dd12e6330df3faec0a3f1b (diff)
downloadbinutils-gdb-eb36a3eb2f846b8d4b16c1bb114136961d0ce5bf.tar.gz
Allow multiple partial symbol readers per objfile
This patch finally changes gdb so that an objfile can have multiple sources of partial symbols (or mixed partial symbols and other kinds of indices). This is done by having each symbol reader create its own psymbol_functions object and add it to the 'qf' list in the objfile. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_initial_scan): Create partial symtabs. * symfile.c (syms_from_objfile_1, reread_symbols): Update. * psymtab.h (make_psymbol_functions): Don't declare. * psymtab.c (make_psymbol_functions): Remove. (maintenance_print_psymbols): Update. * psympriv.h (struct psymbol_functions): Add no-argument constructor. * objfiles.h (struct objfile) <reset_psymtabs>: Remove. <partial_symtabs>: Remove. * mdebugread.c (mdebug_build_psymtabs): Create partial symtabs. * elfread.c (read_partial_symbols): Update. (elf_symfile_read): Remove check for existing partial symbols. Don't clear "qf". * dwarf2/read.c (dwarf2_has_info): Remove check for existing partial symbols. (dwarf2_build_psymtabs): Add psymbol_functions parameter. Create partial symtabs. * dwarf2/public.h (dwarf2_build_psymtabs): Add psymbol_functions parameter. * dbxread.c (dbx_symfile_read): Create partial symtabs. * ctfread.c (elfctf_build_psymtabs): Create partial symtabs.
Diffstat (limited to 'gdb/elfread.c')
-rw-r--r--gdb/elfread.c19
1 files changed, 3 insertions, 16 deletions
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 1cf9b2addc4..85100875347 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -67,7 +67,7 @@ struct lazy_dwarf_reader : public psymbol_functions
void read_partial_symbols (struct objfile *objfile) override
{
if (dwarf2_has_info (objfile, nullptr))
- dwarf2_build_psymtabs (objfile);
+ dwarf2_build_psymtabs (objfile, this);
}
};
@@ -1278,16 +1278,11 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
{
dw_index_kind index_kind;
- /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF
- debug information present in OBJFILE. If there is such debug
- info present never use an index. */
- if (!objfile->has_partial_symbols ()
- && dwarf2_initialize_objfile (objfile, &index_kind))
+ if (dwarf2_initialize_objfile (objfile, &index_kind))
{
switch (index_kind)
{
case dw_index_kind::GDB_INDEX:
- objfile->qf.clear ();
objfile->qf.push_front (make_dwarf_gdb_index ());
break;
case dw_index_kind::DEBUG_NAMES:
@@ -1297,15 +1292,7 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
}
}
else
- {
- /* It is ok to do this even if the stabs reader made some
- partial symbols, because OBJF_PSYMTABS_READ has not been
- set, and so our lazy reader function will still be called
- when needed. */
- objfile->qf.clear ();
- objfile->qf.emplace_front
- (new lazy_dwarf_reader (objfile->partial_symtabs));
- }
+ objfile->qf.emplace_front (new lazy_dwarf_reader);
}
/* If the file has its own symbol tables it has no separate debug
info. `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to