[PATCH 4/4] Use add_partial_symbol in load_partial_dies

Tom Tromey
2020-05-20T17:40:35Z

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-20 Tom Tromey <tromey@adacore.com>

* dwarf2/read.c (load_partial_dies): Use add_partial_symbol.
---
gdb/ChangeLog | 4 ++++
gdb/dwarf2/read.c | 13 +++----------
2 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index b40857be5e4..363468f3683 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -18190,10 +18190,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;
}
@@ -18224,12 +18222,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;
--
2.21.3