From patchwork Tue Oct 22 18:47:29 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: 35231 Received: (qmail 18536 invoked by alias); 22 Oct 2019 18:47:36 -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 18526 invoked by uid 89); 22 Oct 2019 18:47:35 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.2 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= X-HELO: mail-qk1-f201.google.com Received: from mail-qk1-f201.google.com (HELO mail-qk1-f201.google.com) (209.85.222.201) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 22 Oct 2019 18:47:34 +0000 Received: by mail-qk1-f201.google.com with SMTP id t1so10792582qkm.0 for ; Tue, 22 Oct 2019 11:47:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=unAOhq+jpeYslWkLZB7VpUrHOAz+012z7dYAWmZ5seY=; b=qcGQtc3+OTrGReBsAuYHfQJiTj2meaWX/ar9tAjHNWSFxPKfSGW196ZT3xf+1XOh0X zogiqtYGYt0BqS0nS1TjUb3nai/xfZ/p9EP9XoZgbIRj8AHIpxQeViSJWI/gjiCgWcbk LPnvCVkn9EsNlXZeU9jHzwPha1r0n/1ZU2GcV1BRpdAay9Mqk/+05XITUEETj+GPeewP tqmMFFz22WBTFTbllh1pkYbPGWDrO8ioKYe8QzMlD70k/ZFZc2mwoX7CJPabkoprtJ6s 1TVctLaGw7dmwHHv56xGtgWxXq1kuxV/zCzJ2WgXBz6le8yW0PVXyeo72nwi8JyMKk9a mvvQ== Date: Tue, 22 Oct 2019 13:47:29 -0500 Message-Id: <20191022184729.176905-1-cbiesinger@google.com> Mime-Version: 1.0 Subject: [FYI] [PATCH] Fix compile error & incorrect push 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 I accidentally pushed the wrong version of the patch for commit 7bb43059820c5febb4509b15202a93efde442bc6 (where the review comments were not fixed), and I did a bad conflict resolution for ccb1ba62299edce72053dd567b9d384814e11885 leading to a compile error when libxxhash is available. This fixes both issues. gdb/ChangeLog: 2019-10-22 Christian Biesinger * symtab.c (struct demangled_name_entry): Add a constructor. (free_demangled_name_entry): New function to call the destructor for demangled_name_entry. (create_demangled_names_hash): Pass free_demangled_name_entry to htab_create_alloc. (symbol_set_names): Call placement new for demangled_name_entry. * utils.c: No longer include xxhash.h here, now that fast_hash is inlined in the header. * utils.h: Instead, include it here. Change-Id: If776099d39a65a12733d42efcb859feca1b07a39 --- gdb/ChangeLog | 12 ++++++++++++ gdb/symtab.c | 23 ++++++++++++++++++----- gdb/utils.c | 4 ---- gdb/utils.h | 4 ++++ 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3fac7952ad..8255a8540c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2019-10-22 Christian Biesinger + + * symtab.c (struct demangled_name_entry): Add a constructor. + (free_demangled_name_entry): New function to call the destructor + for demangled_name_entry. + (create_demangled_names_hash): Pass free_demangled_name_entry to + htab_create_alloc. + (symbol_set_names): Call placement new for demangled_name_entry. + * utils.c: No longer include xxhash.h here, now that fast_hash + is inlined in the header. + * utils.h: Instead, include it here. + 2019-10-22 Christian Biesinger * Makefile.in: Link with libxxhash. diff --git a/gdb/symtab.c b/gdb/symtab.c index dff92ca203..ed55cecc73 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -715,6 +715,9 @@ symbol_set_language (struct general_symbol_info *gsymbol, /* Objects of this type are stored in the demangled name hash table. */ struct demangled_name_entry { + demangled_name_entry (gdb::string_view mangled_name) + : mangled (mangled_name) {} + gdb::string_view mangled; ENUM_BITFIELD(language) language : LANGUAGE_BITS; char demangled[1]; @@ -744,6 +747,15 @@ eq_demangled_name_entry (const void *a, const void *b) return da->mangled == db->mangled; } +static void +free_demangled_name_entry (void *data) +{ + struct demangled_name_entry *e + = (struct demangled_name_entry *) data; + + e->~demangled_name_entry(); +} + /* Create the hash table used for demangled names. Each hash entry is a pair of strings; one for the mangled name and one for the demangled name. The entry is hashed via just the mangled name. */ @@ -758,7 +770,7 @@ create_demangled_names_hash (struct objfile_per_bfd_storage *per_bfd) per_bfd->demangled_names_hash.reset (htab_create_alloc (256, hash_demangled_name_entry, eq_demangled_name_entry, - NULL, xcalloc, xfree)); + free_demangled_name_entry, xcalloc, xfree)); } /* Try to determine the demangled name for a symbol, based on the @@ -819,7 +831,6 @@ symbol_set_names (struct general_symbol_info *gsymbol, struct demangled_name_entry **slot; /* A 0-terminated copy of the linkage name. */ const char *linkage_name_copy; - struct demangled_name_entry entry; if (gsymbol->language == language_ada) { @@ -857,7 +868,7 @@ symbol_set_names (struct general_symbol_info *gsymbol, else linkage_name_copy = linkage_name; - entry.mangled = gdb::string_view (linkage_name_copy, len); + struct demangled_name_entry entry (gdb::string_view (linkage_name_copy, len)); slot = ((struct demangled_name_entry **) htab_find_slot (per_bfd->demangled_names_hash.get (), &entry, INSERT)); @@ -890,7 +901,8 @@ 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 = gdb::string_view (linkage_name, len); + new (*slot) demangled_name_entry + (gdb::string_view (linkage_name, len)); } else { @@ -906,7 +918,8 @@ 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 = gdb::string_view (mangled_ptr, len); + new (*slot) demangled_name_entry + (gdb::string_view (mangled_ptr, len)); } (*slot)->language = gsymbol->language; diff --git a/gdb/utils.c b/gdb/utils.c index 1b62e55b57..3afb8e5945 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -36,10 +36,6 @@ #include #endif -#ifdef HAVE_LIBXXHASH -#include -#endif - #include #include "gdbcmd.h" #include "serial.h" diff --git a/gdb/utils.h b/gdb/utils.h index a8ad9d9c86..e837621a2b 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -25,6 +25,10 @@ #include "gdbsupport/scoped_restore.h" #include +#ifdef HAVE_LIBXXHASH +#include +#endif + struct completion_match_for_lcd; class compiled_regex;