Use add_partial_symbol in load_partial_dies

An earlier patch added the add_partial_symbol helper function to
dwarf2/read.c.  However, a couple of calls to add_psymbol_to_list were
left in place.  It turns out that these calls slow down partial symbol
reading, because they still go via the path that tries to needlessly
demangle already-demangled names.

This patch improves the performance of partial symbol reading by
changing this code to use add_partial_symbol instead.

The run previous to this had times of (see the first patch in the
series for an explanation):

gdb    1.64
libxul 1.99
Ada    2.47

This patch improves the times to:

gdb    1.47
libxul 1.89
Ada    2.39

gdb/ChangeLog
2020-05-27  Tom Tromey  <tromey@adacore.com>

	* dwarf2/read.c (load_partial_dies): Use add_partial_symbol.
This commit is contained in:
Tom Tromey 2020-05-27 11:48:18 -06:00
parent af0b2a3e85
commit f0fbb768c2
2 changed files with 7 additions and 10 deletions

View File

@ -1,3 +1,7 @@
2020-05-27 Tom Tromey <tromey@adacore.com>
* dwarf2/read.c (load_partial_dies): Use add_partial_symbol.
2020-05-27 Tom Tromey <tromey@adacore.com>
* dwarf2/abbrev.h (struct abbrev_table) <lookup_abbrev>: Inline.

View File

@ -18358,10 +18358,8 @@ load_partial_dies (const struct die_reader_specs *reader,
|| pdi.tag == DW_TAG_subrange_type))
{
if (building_psymtab && pdi.raw_name != NULL)
add_psymbol_to_list (pdi.name (cu), false,
VAR_DOMAIN, LOC_TYPEDEF, -1,
psymbol_placement::STATIC,
0, cu->language, objfile);
add_partial_symbol (&pdi, cu);
info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr);
continue;
}
@ -18392,12 +18390,7 @@ load_partial_dies (const struct die_reader_specs *reader,
if (pdi.raw_name == NULL)
complaint (_("malformed enumerator DIE ignored"));
else if (building_psymtab)
add_psymbol_to_list (pdi.name (cu), false,
VAR_DOMAIN, LOC_CONST, -1,
cu->language == language_cplus
? psymbol_placement::GLOBAL
: psymbol_placement::STATIC,
0, cu->language, objfile);
add_partial_symbol (&pdi, cu);
info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr);
continue;