From patchwork Tue Oct 8 16:09:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Terekhov, Mikhail via Gdb-patches" X-Patchwork-Id: 34874 Received: (qmail 14804 invoked by alias); 8 Oct 2019 16:09:45 -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 14746 invoked by uid 89); 8 Oct 2019 16:09:44 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=UD:gdb_string_view.h, sk:gdb_str, 9047 X-HELO: mail-yb1-f201.google.com Received: from mail-yb1-f201.google.com (HELO mail-yb1-f201.google.com) (209.85.219.201) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 08 Oct 2019 16:09:43 +0000 Received: by mail-yb1-f201.google.com with SMTP id t48so14393847ybi.22 for ; Tue, 08 Oct 2019 09:09:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=1RiKMBmvzXmwNWbF00IBLByZvPswQdR2uJUSJMKdc0w=; b=L5JS3yor2T13mlMgcAoKXLJRwq9IJGjbYuoDIu71fIfSwno2lgJwipV/jxomFiDQs4 JoKpn+nHq4VYJg6YxYUXgwHVdhsmjR6ElYGaX2RRv/VOsp5mOtQiQ81EsNjNUY5RE8wc p4QEu4flvDs1o1hHBG6niLcwMj8ORi+v93NifY66H6HhbrSVFHXZPwHGze9LY4ihcX+Y CMMiF5HC9G6/LWmuk11RUXIlPmo1n4tm3ig9vvsIozVxTtLe4zw6/qtJ86y0EU0RUXkk eab4oJm9NfYqcJLkzmhBM9FPMtNOnvHywNz+fu1ErDy25X7XD/Kzg4FZ7ch6Lt5qAngi 5Fog== Date: Tue, 8 Oct 2019 11:09:31 -0500 In-Reply-To: <20191008160933.155975-1-cbiesinger@google.com> Message-Id: <20191008160933.155975-2-cbiesinger@google.com> Mime-Version: 1.0 References: <20191008160933.155975-1-cbiesinger@google.com> Subject: [PATCH v2 1/3] Store the mangled name as a string_view X-Patchwork-Original-From: "Christian Biesinger via gdb-patches" From: "Terekhov, Mikhail via Gdb-patches" Reply-To: Christian Biesinger To: gdb-patches@sourceware.org Cc: Christian Biesinger X-IsSubscribed: yes 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-09-27 Christian Biesinger * symtab.c (struct demangled_name_entry): Change type of mangled to gdb::string_view. (hash_demangled_name_entry): Update. (eq_demangled_name_entry): Update. (symbol_set_names): Update. --- gdb/symtab.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/gdb/symtab.c b/gdb/symtab.c index 8a551f1575..0724110d12 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);