diff options
author | Tom Tromey <tom@tromey.com> | 2020-10-17 12:34:53 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2020-10-17 12:34:53 -0600 |
commit | 932539d7a35ccc15316ec8cc0ef0fefcb3c08f4d (patch) | |
tree | 0d5429e890098ea06ec1eec96cc2aafd45fe6e33 /gdb/dwarf2 | |
parent | cfabbd351a174406fd5aa063303f5c8bf9266bbc (diff) | |
download | gdb-932539d7a35ccc15316ec8cc0ef0fefcb3c08f4d.zip gdb-932539d7a35ccc15316ec8cc0ef0fefcb3c08f4d.tar.gz gdb-932539d7a35ccc15316ec8cc0ef0fefcb3c08f4d.tar.bz2 |
Have partial symbol tables own psymbol vectors
Currently pointers to all partial symbols are stored in two vectors;
and then indices into these vectors are stored in each partial_symtab.
This patch changes this so that each partial symtab instead has
vectors of symbols. add_psymbol_to_list can now be changed into a
method on partial_symtab as well.
My main motivation for doing this is that I am looking into calling
sort_pst_symbols in the background. However, I haven't actually
implemented this yet. (Also this may make it more feasible to also
sort the static psymbols, though I haven't tried that either.)
Also, though, this lets us remove the "current_global_psymbols"
vector, because now the callers can simply refer directly to the
psymtab that they are modifying (formerly this was implicit).
The main drawback of this patch is that it increases the size of
partial symtab.
gdb/ChangeLog
2020-10-17 Tom Tromey <tom@tromey.com>
* xcoffread.c (xcoff_end_psymtab): Use partial_symtab::empty.
(scan_xcoff_symtab): Update.
* psymtab.h (class psymtab_storage) <global_psymbols,
static_psymbols, current_global_psymbols,
current_static_psymbols>: Remove.
* psymtab.c (require_partial_symbols, find_pc_sect_psymbol)
(match_partial_symbol, lookup_partial_symbol): Update.
(print_partial_symbols): Change parameters.
(dump_psymtab, recursively_search_psymtabs)
(psym_fill_psymbol_map, psym_find_compunit_symtab_by_address)
(sort_pst_symbols, partial_symtab::partial_symtab): Update.
(concat): Remove.
(end_psymtab_common): Simplify.
(append_psymbol_to_list): Change parameters.
(partial_symtabs::add_psymbol): Rename from add_psymbol_to_list.
(init_psymbol_list): Simplify.
(maintenance_info_psymtabs, maintenance_check_psymtabs): Update.
* psympriv.h (struct partial_symtab) <empty>: New method.
<globals_offset, n_global_syms, statics_offset, n_static_syms>:
Remove.
<global_psymbols, static_psymbols>: New members.
<add_psymbol>: New methods.
(add_psymbol_to_list): Don't declare.
(psymbol_placement): Move earlier.
* mdebugread.c (parse_partial_symbols): Update.
(handle_psymbol_enumerators): Change parameters.
(mdebug_expand_psymtab): Update.
* dwarf2/read.c (process_psymtab_comp_unit_reader)
(add_partial_symbol): Update.
* dwarf2/index-write.c (write_psymbols): Change parameters.
(write_one_signatured_type): Update.
(recursively_count_psymbols): Update.
(recursively_write_psymbols): Update.
(class debug_names) <recursively_write_psymbols>: Update.
<write_psymbols>: Change parameters.
<write_one_signatured_type>: Update.
* dbxread.c (read_dbx_symtab): Update.
(dbx_end_psymtab): Use partial_symtab::empty.
* ctfread.c (struct ctf_context) <pst>: New member.
(create_partial_symtab): Set it.
(ctf_psymtab_type_cb, ctf_psymtab_var_cb): Update.
(scan_partial_symbols): Use the psymtab's context. Update.
Diffstat (limited to 'gdb/dwarf2')
-rw-r--r-- | gdb/dwarf2/index-write.c | 72 | ||||
-rw-r--r-- | gdb/dwarf2/read.c | 5 |
2 files changed, 26 insertions, 51 deletions
diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c index aa7a37e..e6188f7 100644 --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -539,14 +539,12 @@ symbol_kind (struct partial_symbol *psym) static void write_psymbols (struct mapped_symtab *symtab, std::unordered_set<partial_symbol *> &psyms_seen, - struct partial_symbol **psymp, - int count, + const std::vector<partial_symbol *> &symbols, offset_type cu_index, int is_static) { - for (; count-- > 0; ++psymp) + for (partial_symbol *psym : symbols) { - struct partial_symbol *psym = *psymp; const char *name = psym->ginfo.search_name (); if (psym->ginfo.language () == language_ada) @@ -618,17 +616,11 @@ write_one_signatured_type (void **slot, void *d) struct signatured_type *entry = (struct signatured_type *) *slot; partial_symtab *psymtab = entry->per_cu.v.psymtab; - write_psymbols (info->symtab, - info->psyms_seen, - (info->objfile->partial_symtabs->global_psymbols.data () - + psymtab->globals_offset), - psymtab->n_global_syms, info->cu_index, + write_psymbols (info->symtab, info->psyms_seen, + psymtab->global_psymbols, info->cu_index, 0); - write_psymbols (info->symtab, - info->psyms_seen, - (info->objfile->partial_symtabs->static_psymbols.data () - + psymtab->statics_offset), - psymtab->n_static_syms, info->cu_index, + write_psymbols (info->symtab, info->psyms_seen, + psymtab->static_psymbols, info->cu_index, 1); info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, @@ -654,8 +646,8 @@ recursively_count_psymbols (partial_symtab *psymtab, recursively_count_psymbols (psymtab->dependencies[i], psyms_seen); - psyms_seen += psymtab->n_global_syms; - psyms_seen += psymtab->n_static_syms; + psyms_seen += psymtab->global_psymbols.size (); + psyms_seen += psymtab->static_psymbols.size (); } /* Recurse into all "included" dependencies and write their symbols as @@ -676,17 +668,11 @@ recursively_write_psymbols (struct objfile *objfile, psymtab->dependencies[i], symtab, psyms_seen, cu_index); - write_psymbols (symtab, - psyms_seen, - (objfile->partial_symtabs->global_psymbols.data () - + psymtab->globals_offset), - psymtab->n_global_syms, cu_index, + write_psymbols (symtab, psyms_seen, + psymtab->global_psymbols, cu_index, 0); - write_psymbols (symtab, - psyms_seen, - (objfile->partial_symtabs->static_psymbols.data () - + psymtab->statics_offset), - psymtab->n_static_syms, cu_index, + write_psymbols (symtab, psyms_seen, + psymtab->static_psymbols, cu_index, 1); } @@ -912,14 +898,10 @@ public: recursively_write_psymbols (objfile, psymtab->dependencies[i], psyms_seen, cu_index); - write_psymbols (psyms_seen, - (objfile->partial_symtabs->global_psymbols.data () - + psymtab->globals_offset), - psymtab->n_global_syms, cu_index, false, unit_kind::cu); - write_psymbols (psyms_seen, - (objfile->partial_symtabs->static_psymbols.data () - + psymtab->statics_offset), - psymtab->n_static_syms, cu_index, true, unit_kind::cu); + write_psymbols (psyms_seen, psymtab->global_psymbols, + cu_index, false, unit_kind::cu); + write_psymbols (psyms_seen, psymtab->static_psymbols, + cu_index, true, unit_kind::cu); } /* Return number of bytes the .debug_names section will have. This @@ -1251,13 +1233,11 @@ private: /* Call insert for all partial symbols and mark them in PSYMS_SEEN. */ void write_psymbols (std::unordered_set<partial_symbol *> &psyms_seen, - struct partial_symbol **psymp, int count, int cu_index, - bool is_static, unit_kind kind) + const std::vector<partial_symbol *> &symbols, + int cu_index, bool is_static, unit_kind kind) { - for (; count-- > 0; ++psymp) + for (partial_symbol *psym : symbols) { - struct partial_symbol *psym = *psymp; - /* Only add a given psymbol once. */ if (psyms_seen.insert (psym).second) insert (psym, cu_index, is_static, kind); @@ -1272,16 +1252,10 @@ private: { partial_symtab *psymtab = entry->per_cu.v.psymtab; - write_psymbols (info->psyms_seen, - (info->objfile->partial_symtabs->global_psymbols.data () - + psymtab->globals_offset), - psymtab->n_global_syms, info->cu_index, false, - unit_kind::tu); - write_psymbols (info->psyms_seen, - (info->objfile->partial_symtabs->static_psymbols.data () - + psymtab->statics_offset), - psymtab->n_static_syms, info->cu_index, true, - unit_kind::tu); + write_psymbols (info->psyms_seen, psymtab->global_psymbols, + info->cu_index, false, unit_kind::tu); + write_psymbols (info->psyms_seen, psymtab->static_psymbols, + info->cu_index, true, unit_kind::tu); info->types_list.append_uint (dwarf5_offset_size (), m_dwarf5_byte_order, to_underlying (entry->per_cu.sect_off)); diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 2ec3789..37409c5 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -7667,7 +7667,8 @@ process_psymtab_comp_unit_reader (const struct die_reader_specs *reader, sect_offset_str (per_cu->sect_off), paddress (gdbarch, pst->text_low (objfile)), paddress (gdbarch, pst->text_high (objfile)), - pst->n_global_syms, pst->n_static_syms); + (int) pst->global_psymbols.size (), + (int) pst->static_psymbols.size ()); } /* Subroutine of dwarf2_build_psymtabs_hard to simplify it. @@ -8640,7 +8641,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) &objfile->objfile_obstack); psymbol.ginfo.set_linkage_name (pdi->linkage_name); } - add_psymbol_to_list (psymbol, *where, objfile); + cu->per_cu->v.psymtab->add_psymbol (psymbol, *where, objfile); } } |