From patchwork Wed Oct 30 22:53:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Simon Marchi (Code Review)" X-Patchwork-Id: 35493 Received: (qmail 101349 invoked by alias); 30 Oct 2019 22:53:59 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 101340 invoked by uid 89); 30 Oct 2019 22:53:59 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_STOCKGEN autolearn=ham version=3.3.1 spammy=msymbol X-HELO: mx1.osci.io Received: from polly.osci.io (HELO mx1.osci.io) (8.43.85.229) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 Oct 2019 22:53:57 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id E377C20E5E; Wed, 30 Oct 2019 18:53:55 -0400 (EDT) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [8.43.85.239]) by mx1.osci.io (Postfix) with ESMTP id 36ABC20300; Wed, 30 Oct 2019 18:53:54 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id 1D1AA20AF6; Wed, 30 Oct 2019 18:53:54 -0400 (EDT) X-Gerrit-PatchSet: 3 Date: Wed, 30 Oct 2019 18:53:52 -0400 From: "Tom Tromey (Code Review)" To: gdb-patches@sourceware.org Cc: Simon Marchi Auto-Submitted: auto-generated X-Gerrit-MessageType: newpatchset Subject: [review v3] Defer minimal symbol name-setting X-Gerrit-Change-Id: I4fe3993b99fb3a43968067806e294d48e377fd76 X-Gerrit-Change-Number: 166 X-Gerrit-ChangeURL: X-Gerrit-Commit: 93cf697d370bd0f0c9bed0f56b231c467168fa13 In-Reply-To: References: Reply-To: tromey@sourceware.org, simon.marchi@polymtl.ca, gdb-patches@sourceware.org MIME-Version: 1.0 Content-Disposition: inline User-Agent: Gerrit/3.0.3-75-g9005159e5d Message-Id: <20191030225354.1D1AA20AF6@gnutoolchain-gerrit.osci.io> Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/166 ...................................................................... Defer minimal symbol name-setting Currently the demangled name of a minimal symbol is set when creating the symbol. However, there is no intrinsic need to do this. This patch instead arranges for the demangling to be done just before the minsym hash tables are filled. This will be useful in a later patch. gdb/ChangeLog 2019-10-19 Tom Tromey * symtab.h (struct minimal_symbol) : New member. * minsyms.c (minimal_symbol_reader::record_full): Copy name. Don't call symbol_set_names. (minimal_symbol_reader::install): Call symbol_set_names. Change-Id: I4fe3993b99fb3a43968067806e294d48e377fd76 --- M gdb/ChangeLog M gdb/minsyms.c M gdb/symtab.h 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0382082..bf2e059 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2019-10-19 Tom Tromey + + * symtab.h (struct minimal_symbol) : New member. + * minsyms.c (minimal_symbol_reader::record_full): Copy name. + Don't call symbol_set_names. + (minimal_symbol_reader::install): Call symbol_set_names. + 2019-10-30 Christian Biesinger * minsyms.c (clear_minimal_symbol_hash_tables): New function. diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 78cb15b..3af6e2e 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -1127,7 +1127,12 @@ msymbol = &m_msym_bunch->contents[m_msym_bunch_index]; symbol_set_language (msymbol, language_auto, &m_objfile->per_bfd->storage_obstack); - symbol_set_names (msymbol, name, copy_name, m_objfile->per_bfd); + + if (copy_name) + msymbol->name = obstack_strndup (&m_objfile->per_bfd->storage_obstack, + name.data (), name.size ()); + else + msymbol->name = name.data (); SET_MSYMBOL_VALUE_ADDRESS (msymbol, address); MSYMBOL_SECTION (msymbol) = section; @@ -1354,6 +1359,17 @@ m_objfile->per_bfd->minimal_symbol_count = mcount; m_objfile->per_bfd->msymbols = std::move (msym_holder); + msymbols = m_objfile->per_bfd->msymbols.get (); + for (int i = 0; i < mcount; ++i) + { + if (!msymbols[i].name_set) + { + symbol_set_names (&msymbols[i], msymbols[i].name, + false, m_objfile->per_bfd); + msymbols[i].name_set = 1; + } + } + build_minimal_symbol_hash_tables (m_objfile); } } diff --git a/gdb/symtab.h b/gdb/symtab.h index 20c11d1..ede2600 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -691,6 +691,10 @@ unsigned maybe_copied : 1; + /* Non-zero if this symbol ever had its demangled name set (even if + it was set to NULL). */ + unsigned int name_set : 1; + /* Minimal symbols with the same hash key are kept on a linked list. This is the link. */