aboutsummaryrefslogtreecommitdiff
path: root/gdb/elfread.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-03-28 10:43:15 -0600
committerTom Tromey <tom@tromey.com>2021-03-28 10:43:15 -0600
commitedc02ceb9763d414af79990a5fdb5e50aa59ceb6 (patch)
treefec3eefb932c568bb90309ec0776b660dc96b4f3 /gdb/elfread.c
parentfff7b4f846b7f85482393dee31169b1b6bf34e4d (diff)
downloadgdb-edc02ceb9763d414af79990a5fdb5e50aa59ceb6.zip
gdb-edc02ceb9763d414af79990a5fdb5e50aa59ceb6.tar.gz
gdb-edc02ceb9763d414af79990a5fdb5e50aa59ceb6.tar.bz2
Simplify DWARF reader initialization
Now that the quick functions are separate from the object file format, there's no need to have elfread.c push a new entry on the objfile 'qf' list. Instead, this detail can be pushed into the DWARF reader. That is what this patch implements. I wasn't sure whether lazy reading still makes sense or not. It's still only used by ELF, and only in certain situations (like vfork, I think). It may not be carrying its weight, so we may want to consider removing this in the future. Also, I'm unclear on why the various indices are only used for ELF. This seems sub-optimal. However, I haven't tried to address that here. gdb/ChangeLog 2021-03-28 Tom Tromey <tom@tromey.com> * elfread.c (can_lazily_read_symbols): Move to dwarf2/read.c. (elf_symfile_read): Simplify. * dwarf2/read.c (struct lazy_dwarf_reader): Move from elfread.c. (make_lazy_dwarf_reader): New function. (make_dwarf_gdb_index, make_dwarf_debug_names): Now static. (dwarf2_initialize_objfile): Return void. Remove index_kind parameter. Push on 'qf' list. * dwarf2/public.h (dwarf2_initialize_objfile): Change return type. Remove 'index_kind' parameter. (make_dwarf_gdb_index, make_dwarf_debug_names): Don't declare.
Diffstat (limited to 'gdb/elfread.c')
-rw-r--r--gdb/elfread.c37
1 files changed, 1 insertions, 36 deletions
diff --git a/gdb/elfread.c b/gdb/elfread.c
index f5de913..1dea226 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -53,24 +53,6 @@
#include "debuginfod-support.h"
#include "dwarf2/public.h"
-/* A subclass of psymbol_functions that arranges to read the DWARF
- partial symbols when needed. */
-struct lazy_dwarf_reader : public psymbol_functions
-{
- using psymbol_functions::psymbol_functions;
-
- bool can_lazily_read_symbols () override
- {
- return true;
- }
-
- void read_partial_symbols (struct objfile *objfile) override
- {
- if (dwarf2_has_info (objfile, nullptr))
- dwarf2_build_psymtabs (objfile, this);
- }
-};
-
/* The struct elfinfo is available only during ELF symbol table and
psymtab reading. It is destroyed at the completion of psymtab-reading.
It's local to elf_symfile_read. */
@@ -1273,24 +1255,7 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
}
if (dwarf2_has_info (objfile, NULL, true))
- {
- dw_index_kind index_kind;
-
- if (dwarf2_initialize_objfile (objfile, &index_kind))
- {
- switch (index_kind)
- {
- case dw_index_kind::GDB_INDEX:
- objfile->qf.push_front (make_dwarf_gdb_index ());
- break;
- case dw_index_kind::DEBUG_NAMES:
- objfile->qf.push_front (make_dwarf_debug_names ());
- break;
- }
- }
- else
- objfile->qf.emplace_front (new lazy_dwarf_reader);
- }
+ dwarf2_initialize_objfile (objfile);
/* If the file has its own symbol tables it has no separate debug
info. `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
SYMTABS/PSYMTABS. `.gnu_debuglink' may no longer be present with