From a8ad4f3c17727fe2c499a9a8f775ccfe877326ac Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 20 Mar 2021 17:23:40 -0600 Subject: [PATCH] Change objfile_has_partial_symbols to a method This changes objfile_has_partial_symbols to be a method on objfile. There are some other functions that could benefit from this sort of change, but this was the only one that was relevant to this series. gdb/ChangeLog 2021-03-20 Tom Tromey * symfile.c (read_symbols): Update. * objfiles.h (struct objfile) : New method. (objfile_has_partial_symbols): Don't declare. * objfiles.c (objfile::has_partial_symbols): Rename from objfile_has_partial_symbols. (objfile_has_symbols, have_partial_symbols): Update. * elfread.c (elf_symfile_read): Update. * dwarf2/read.c (dwarf2_has_info): Update. * coffread.c (coff_symfile_read): Update. --- gdb/ChangeLog | 12 ++++++++++++ gdb/coffread.c | 2 +- gdb/dwarf2/read.c | 2 +- gdb/elfread.c | 6 +++--- gdb/objfiles.c | 16 ++++++++-------- gdb/objfiles.h | 5 +++-- gdb/symfile.c | 2 +- 7 files changed, 29 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b06b6d23b66..20f7b56d4f8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2021-03-20 Tom Tromey + + * symfile.c (read_symbols): Update. + * objfiles.h (struct objfile) : New method. + (objfile_has_partial_symbols): Don't declare. + * objfiles.c (objfile::has_partial_symbols): Rename from + objfile_has_partial_symbols. + (objfile_has_symbols, have_partial_symbols): Update. + * elfread.c (elf_symfile_read): Update. + * dwarf2/read.c (dwarf2_has_info): Update. + * coffread.c (coff_symfile_read): Update. + 2021-03-20 Tom Tromey * coffread.c: Include dwarf2/public.h. diff --git a/gdb/coffread.c b/gdb/coffread.c index d15ba6593fc..badcb5a6084 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -708,7 +708,7 @@ coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) dwarf2_build_frame_info (objfile); /* Try to add separate debug file if no symbols table found. */ - if (!objfile_has_partial_symbols (objfile)) + if (!objfile->has_partial_symbols ()) { std::string debugfile = find_separate_debug_file_by_buildid (objfile); diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 4d6d87b2e5e..dd2abd39b0f 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -1954,7 +1954,7 @@ dwarf2_has_info (struct objfile *objfile, /* We can share a "dwarf2_per_bfd" with other objfiles if the BFD doesn't require relocations and if there aren't partial symbols from some other reader. */ - if (!objfile_has_partial_symbols (objfile) + if (!objfile->has_partial_symbols () && !gdb_bfd_requires_relocations (objfile->obfd)) { /* See if one has been created for this BFD yet. */ diff --git a/gdb/elfread.c b/gdb/elfread.c index 8f06c8edc79..439f5cc29a0 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -1266,7 +1266,7 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) /* 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 (objfile) + if (!objfile->has_partial_symbols () && dwarf2_initialize_objfile (objfile, &index_kind)) { switch (index_kind) @@ -1293,14 +1293,14 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) SYMTABS/PSYMTABS. `.gnu_debuglink' may no longer be present with `.note.gnu.build-id'. - .gnu_debugdata is !objfile_has_partial_symbols because it contains only + .gnu_debugdata is !objfile::has_partial_symbols because it contains only .symtab, not .debug_* section. But if we already added .gnu_debugdata as an objfile via find_separate_debug_file_in_section there was no separate debug info available. Therefore do not attempt to search for another one, objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to be NULL and we would possibly violate it. */ - else if (!objfile_has_partial_symbols (objfile) + else if (!objfile->has_partial_symbols () && objfile->separate_debug_objfile == NULL && objfile->separate_debug_objfile_backlink == NULL) { diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 2a513d82f1a..53ca66d17e6 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -810,23 +810,23 @@ objfile_rebase (struct objfile *objfile, CORE_ADDR slide) breakpoint_re_set (); } -/* Return non-zero if OBJFILE has partial symbols. */ +/* See objfiles.h. */ int -objfile_has_partial_symbols (struct objfile *objfile) +objfile::has_partial_symbols () { - if (!objfile->sf) + if (!sf) return 0; /* If we have not read psymbols, but we have a function capable of reading them, then that is an indication that they are in fact available. Without this function the symbols may have been already read in but they also may not be present in this objfile. */ - if ((objfile->flags & OBJF_PSYMTABS_READ) == 0 - && objfile->sf->sym_read_psymbols != NULL) + if ((flags & OBJF_PSYMTABS_READ) == 0 + && sf->sym_read_psymbols != NULL) return 1; - return objfile->sf->qf->has_symbols (objfile); + return sf->qf->has_symbols (this); } /* Return non-zero if OBJFILE has full symbols. */ @@ -844,7 +844,7 @@ int objfile_has_symbols (struct objfile *objfile) { for (::objfile *o : objfile->separate_debug_objfiles ()) - if (objfile_has_partial_symbols (o) || objfile_has_full_symbols (o)) + if (o->has_partial_symbols () || objfile_has_full_symbols (o)) return 1; return 0; } @@ -859,7 +859,7 @@ have_partial_symbols (void) { for (objfile *ofp : current_program_space->objfiles ()) { - if (objfile_has_partial_symbols (ofp)) + if (ofp->has_partial_symbols ()) return 1; } return 0; diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 052f109db4d..0568e16ae4c 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -548,6 +548,9 @@ public: return per_bfd->gdbarch; } + /* Return true if OBJFILE has partial symbols. */ + + int has_partial_symbols (); /* The object file's original name as specified by the user, made absolute, and tilde-expanded. However, it is not canonicalized @@ -738,8 +741,6 @@ extern void free_objfile_separate_debug (struct objfile *); extern void objfile_relocate (struct objfile *, const section_offsets &); extern void objfile_rebase (struct objfile *, CORE_ADDR); -extern int objfile_has_partial_symbols (struct objfile *objfile); - extern int objfile_has_full_symbols (struct objfile *objfile); extern int objfile_has_symbols (struct objfile *objfile); diff --git a/gdb/symfile.c b/gdb/symfile.c index ec5d34ac783..34d6363a91a 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -775,7 +775,7 @@ read_symbols (struct objfile *objfile, symfile_add_flags add_flags) /* find_separate_debug_file_in_section should be called only if there is single binary with no existing separate debug info file. */ - if (!objfile_has_partial_symbols (objfile) + if (!objfile->has_partial_symbols () && objfile->separate_debug_objfile == NULL && objfile->separate_debug_objfile_backlink == NULL) { -- 2.30.2