From f0fbb768c223fd65385e2e2380fd04fde7121e5e Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 27 May 2020 11:48:18 -0600 Subject: [PATCH] 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 * 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/ChangeLog b/gdb/ChangeLog index 2548ccdbf6..90577b7e61 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2020-05-27 Tom Tromey + + * dwarf2/read.c (load_partial_dies): Use add_partial_symbol. + 2020-05-27 Tom Tromey * dwarf2/abbrev.h (struct abbrev_table) : Inline. diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 655338d2ef..a62224c0be 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -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;