From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 82652 invoked by alias); 22 Oct 2019 17:54:45 -0000 Mailing-List: contact gdb-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: , Sender: gdb-cvs-owner@sourceware.org List-Subscribe: Sender: gdb-cvs-owner@sourceware.org Received: (qmail 82486 invoked by uid 10256); 22 Oct 2019 17:54:45 -0000 Date: Tue, 22 Oct 2019 17:54:00 -0000 Message-ID: <20191022175445.82484.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Christian Biesinger To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Store the mangled name as a string_view X-Act-Checkin: binutils-gdb X-Git-Author: Christian Biesinger X-Git-Refname: refs/heads/master X-Git-Oldrev: 6207ed28773381859319cf314eb9c4e0683c0773 X-Git-Newrev: 7bb43059820c5febb4509b15202a93efde442bc6 X-SW-Source: 2019-10/txt/msg00156.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=7bb43059820c5febb4509b15202a93efde442bc6 commit 7bb43059820c5febb4509b15202a93efde442bc6 Author: Christian Biesinger Date: Fri Sep 27 12:40:04 2019 -0500 Store the mangled name as a string_view This should be a bit faster (because we can compare the size first), but it is also a dependency for the next patch. (3.47% of gdb startup time is spent in eq_demangled_name_entry when attaching to Chrome's content_shell binary) gdb/ChangeLog: 2019-10-22 Christian Biesinger * symtab.c (struct demangled_name_entry): Change type of mangled to gdb::string_view. Also adds a constructor that takes the mangled name. (hash_demangled_name_entry): Update. (eq_demangled_name_entry): Update. (free_demangled_name_entry): New function to call the destructor now that this is not a POD anymore. (create_demangled_names_hash): Pass free_demangled_name_entry to htab_create_alloc. (symbol_set_names): Update. Change-Id: I24711ae2bcaa9e79ca89a6f8fda385d400419175 Diff: --- gdb/ChangeLog | 13 +++++++++++++ gdb/symtab.c | 15 ++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a70f3e1..d271330 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2019-10-22 Christian Biesinger + + * symtab.c (struct demangled_name_entry): Change type of mangled + to gdb::string_view. Also adds a constructor that takes the + mangled name. + (hash_demangled_name_entry): Update. + (eq_demangled_name_entry): Update. + (free_demangled_name_entry): New function to call the destructor + now that this is not a POD anymore. + (create_demangled_names_hash): Pass free_demangled_name_entry to + htab_create_alloc. + (symbol_set_names): Update. + 2019-10-21 Ali Tamur * dwarf2read.c (dir_index): Change type. diff --git a/gdb/symtab.c b/gdb/symtab.c index fc736fd..567d09d 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -68,6 +68,7 @@ #include "filename-seen-cache.h" #include "arch-utils.h" #include +#include "gdbsupport/gdb_string_view.h" #include "gdbsupport/pathstuff.h" /* Forward declarations for local functions. */ @@ -713,7 +714,7 @@ symbol_set_language (struct general_symbol_info *gsymbol, /* Objects of this type are stored in the demangled name hash table. */ struct demangled_name_entry { - const char *mangled; + gdb::string_view mangled; ENUM_BITFIELD(language) language : LANGUAGE_BITS; char demangled[1]; }; @@ -726,7 +727,7 @@ hash_demangled_name_entry (const void *data) const struct demangled_name_entry *e = (const struct demangled_name_entry *) data; - return htab_hash_string (e->mangled); + return iterative_hash (e->mangled.data (), e->mangled.length (), 0); } /* Equality function for the demangled name hash. */ @@ -739,7 +740,7 @@ eq_demangled_name_entry (const void *a, const void *b) const struct demangled_name_entry *db = (const struct demangled_name_entry *) b; - return strcmp (da->mangled, db->mangled) == 0; + return da->mangled == db->mangled; } /* Create the hash table used for demangled names. Each hash entry is @@ -855,7 +856,7 @@ symbol_set_names (struct general_symbol_info *gsymbol, else linkage_name_copy = linkage_name; - entry.mangled = linkage_name_copy; + entry.mangled = gdb::string_view (linkage_name_copy, len); slot = ((struct demangled_name_entry **) htab_find_slot (per_bfd->demangled_names_hash.get (), &entry, INSERT)); @@ -888,7 +889,7 @@ symbol_set_names (struct general_symbol_info *gsymbol, obstack_alloc (&per_bfd->storage_obstack, offsetof (struct demangled_name_entry, demangled) + demangled_len + 1)); - (*slot)->mangled = linkage_name; + (*slot)->mangled = gdb::string_view (linkage_name, len); } else { @@ -904,7 +905,7 @@ symbol_set_names (struct general_symbol_info *gsymbol, + len + demangled_len + 2)); mangled_ptr = &((*slot)->demangled[demangled_len + 1]); strcpy (mangled_ptr, linkage_name_copy); - (*slot)->mangled = mangled_ptr; + (*slot)->mangled = gdb::string_view (mangled_ptr, len); } (*slot)->language = gsymbol->language; @@ -917,7 +918,7 @@ symbol_set_names (struct general_symbol_info *gsymbol, || gsymbol->language == language_auto) gsymbol->language = (*slot)->language; - gsymbol->name = (*slot)->mangled; + gsymbol->name = (*slot)->mangled.data (); if ((*slot)->demangled[0] != '\0') symbol_set_demangled_name (gsymbol, (*slot)->demangled, &per_bfd->storage_obstack);