From patchwork Mon Sep 30 22:29:53 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: 34751 Received: (qmail 35356 invoked by alias); 30 Sep 2019 22:30:03 -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 35339 invoked by uid 89); 30 Sep 2019 22:30:02 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=HX-Received:1a45, H*MI:google X-HELO: mail-qt1-f202.google.com Received: from mail-qt1-f202.google.com (HELO mail-qt1-f202.google.com) (209.85.160.202) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 30 Sep 2019 22:30:01 +0000 Received: by mail-qt1-f202.google.com with SMTP id n59so15407405qtd.8 for ; Mon, 30 Sep 2019 15:30:00 -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=lBre6t5DjHSqKk3RuAk1a5jZQl3pJWisMmrEm60LWRY=; b=P+/SPzqPdT6HOUtf8nUiUdzVtxUr7m3McSqCIA1YLNRoPq65NgtdU0PgLJOhU3Du3q BzlNGbK/gYw0oDEyqLFYYc7/3l3N1AHx2fkC4chyX+kf0Du+HbCwdIFV6mezw8Kg1aNU 2+G41YujlULXFAKkQtEMcCq+21CtX+mNDYsUCHu8RAdjoRWk4Uha+6Ub3XV3gtUof0sN jz95qojYFa1oPxROxRHTtH6vu1UxIQV3lJ84OdpCdPs3xwLITP7xgrCb0o2jAOCdtAcP D8w/K8rUaCuNe5Bbwb+ShIx/kPvf7L06VnEqxLPgmUuunuSoDa6BvpkaeTnhSER4rNjJ 8XOw== Date: Mon, 30 Sep 2019 17:29:53 -0500 Message-Id: <20190930222953.136346-1-cbiesinger@google.com> Mime-Version: 1.0 Subject: [PATCH] Compute msymbol hash codes in parallel 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 patch applies on top of https://sourceware.org/ml/gdb-patches/2019-09/msg00620.html for an additional 10-15% speedup] This is for the msymbol_hash and msymbol_demangled_hash hashtables in objfile_per_bfd_storage. This basically computes those hash codes together with the demangled symbol name in the background, before it inserts the symbols in the hash table. gdb/ChangeLog: 2019-09-30 Christian Biesinger * minsyms.c (add_minsym_to_hash_table): Use a previously computed hash code if possible. (add_minsym_to_demangled_hash_table): Likewise. (minimal_symbol_reader::install): Compute the hash codes for msymbol on the background thread. * symtab.h (struct minimal_symbol) : Add these fields. --- gdb/minsyms.c | 19 +++++++++++++------ gdb/symtab.h | 3 +++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 4802b0bea0..ee80401b91 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -155,8 +155,9 @@ add_minsym_to_hash_table (struct minimal_symbol *sym, { if (sym->hash_next == NULL) { - unsigned int hash - = msymbol_hash (MSYMBOL_LINKAGE_NAME (sym)) % MINIMAL_SYMBOL_HASH_SIZE; + if (sym->hash_value == 0) + sym->hash_value = msymbol_hash (MSYMBOL_LINKAGE_NAME (sym)); + unsigned int hash = sym->hash_value % MINIMAL_SYMBOL_HASH_SIZE; sym->hash_next = table[hash]; table[hash] = sym; @@ -171,14 +172,16 @@ add_minsym_to_demangled_hash_table (struct minimal_symbol *sym, { if (sym->demangled_hash_next == NULL) { - unsigned int hash = search_name_hash (MSYMBOL_LANGUAGE (sym), - MSYMBOL_SEARCH_NAME (sym)); - + if (sym->demangled_hash_value == 0) + sym->demangled_hash_value + = search_name_hash (MSYMBOL_LANGUAGE (sym), + MSYMBOL_SEARCH_NAME (sym)); objfile->per_bfd->demangled_hash_languages.set (MSYMBOL_LANGUAGE (sym)); struct minimal_symbol **table = objfile->per_bfd->msymbol_demangled_hash; - unsigned int hash_index = hash % MINIMAL_SYMBOL_HASH_SIZE; + unsigned int hash_index + = sym->demangled_hash_value % MINIMAL_SYMBOL_HASH_SIZE; sym->demangled_hash_next = table[hash_index]; table[hash_index] = sym; } @@ -1368,6 +1371,10 @@ minimal_symbol_reader::install () msym.name_set = 1; } } + msym.hash_value = msymbol_hash (MSYMBOL_LINKAGE_NAME (&msym)); + msym.demangled_hash_value + = search_name_hash (MSYMBOL_LANGUAGE (&msym), + MSYMBOL_SEARCH_NAME (&msym)); }, [&] (minimal_symbol *first, minimal_symbol* last) { std::lock_guard guard (demangled_mutex); diff --git a/gdb/symtab.h b/gdb/symtab.h index 17903df92d..27499eab6a 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -693,6 +693,9 @@ struct minimal_symbol : public general_symbol_info struct minimal_symbol *demangled_hash_next; + unsigned int hash_value; + unsigned int demangled_hash_value; + /* True if this symbol is of some data type. */ bool data_p () const;