Introduce class psymtab_storage
This introduces a new psymtab_storage class, which holds all psymbol-related objects that are independent of the objfile. (This latter contraint explains why psymbol_map was not moved; though this could still be done with some work.) This patch does not yet change where psymtab allocation is done -- that comes later. This just wraps everything in a single object to make further transformations simpler. Note that a shared_ptr is used to link from the objfile to the psymtab_storage object. The end goal here is to allow a given symbol reader to simply attach to the psymtab_storage object to the BFD, then reuse it in later invocations; shared_ptr makes this simple to reason about. gdb/ChangeLog 2019-01-10 Tom Tromey <tom@tromey.com> * symmisc.c (print_symbol_bcache_statistics): Update. (print_objfile_statistics): Update. * symfile.c (reread_symbols): Update. * psymtab.h (class psymtab_storage): New. * psymtab.c (psymtab_storage): New constructor. (~psymtab_storage): New destructor. (require_partial_symbols): Update. (ALL_OBJFILE_PSYMTABS_REQUIRED): Rewrite. (find_pc_sect_psymtab, find_pc_sect_psymbol) (match_partial_symbol, lookup_partial_symbol, dump_psymtab) (psym_dump, recursively_search_psymtabs, psym_has_symbols) (psym_find_compunit_symtab_by_address, sort_pst_symbols) (start_psymtab_common, end_psymtab_common) (add_psymbol_to_bcache, add_psymbol_to_list, init_psymbol_list) (allocate_psymtab): Update. (psymtab_storage::discard_psymtab): Rename from discard_psymtab. Update. (dump_psymtab_addrmap, maintenance_print_psymbols) (maintenance_check_psymtabs): Update. (class objfile_psymtabs): Move to objfiles.h. * psympriv.h (discard_psymtab): Now inline. (psymtab_discarder::psymtab_discarder): Update. (psymtab_discarder::~psymtab_discarder): Update. (ALL_OBJFILE_PSYMTABS): Rewrite. * objfiles.h (struct objfile) <psymtabs, psymtabs_addrmap, free_psymtabs, psymbol_cache, global_psymbols, static_psymbols>: Remove fields. <partial_symtabs>: New field. (class objfile_psymtabs): Move from psymtab.h. Update. * objfiles.c (objfile::objfile): Initialize partial_symtabs, not psymbol_cache. (objfile::~objfile): Don't destroy psymbol_cache. * mdebugread.c (parse_partial_symbols): Update. * dwarf2read.c (create_addrmap_from_index) (create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab) (process_psymtab_comp_unit_reader, dwarf2_build_psymtabs_hard) (add_partial_subprogram, dwarf2_ranges_read): Update. * dwarf-index-write.c (write_address_map) (write_one_signatured_type, recursively_write_psymbols) (class debug_names, class debug_names, write_psymtabs_to_index): Update.
This commit is contained in:
parent
1d94a5a36a
commit
d320c2b5e1
11 changed files with 273 additions and 145 deletions
|
@ -3739,11 +3739,12 @@ parse_partial_symbols (minimal_symbol_reader &reader,
|
|||
|
||||
/* Remove the dummy psymtab created for -O3 images above, if it is
|
||||
still empty, to enable the detection of stripped executables. */
|
||||
if (objfile->psymtabs->next == NULL
|
||||
&& objfile->psymtabs->number_of_dependencies == 0
|
||||
&& objfile->psymtabs->n_global_syms == 0
|
||||
&& objfile->psymtabs->n_static_syms == 0)
|
||||
objfile->psymtabs = NULL;
|
||||
pst = objfile->partial_symtabs->psymtabs;
|
||||
if (pst->next == NULL
|
||||
&& pst->number_of_dependencies == 0
|
||||
&& pst->n_global_syms == 0
|
||||
&& pst->n_static_syms == 0)
|
||||
objfile->partial_symtabs->psymtabs = NULL;
|
||||
}
|
||||
|
||||
/* If the current psymbol has an enumerated type, we need to add
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue