From patchwork Fri Mar 8 22:43:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 31797 Received: (qmail 96324 invoked by alias); 8 Mar 2019 22:43:40 -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 96315 invoked by uid 89); 8 Mar 2019 22:43:39 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-21.0 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_HELO_PASS autolearn=ham version=3.3.1 spammy=psymtab.h, psymtabh, UD:psymtab.h X-HELO: gateway23.websitewelcome.com Received: from gateway23.websitewelcome.com (HELO gateway23.websitewelcome.com) (192.185.47.80) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 08 Mar 2019 22:43:37 +0000 Received: from cm17.websitewelcome.com (cm17.websitewelcome.com [100.42.49.20]) by gateway23.websitewelcome.com (Postfix) with ESMTP id B042917C3F for ; Fri, 8 Mar 2019 16:43:36 -0600 (CST) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id 2ODIhJi4Q90on2ODIhcVSU; Fri, 08 Mar 2019 16:43:36 -0600 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=afeQ5wjEkRGZ8EaWhIQabnjAQABsFUkvLQXx9DbOtOU=; b=N4OBqZmIpgLkJeiLqOPoCQT80A 3BrUC3E2KmKBl6OwMUajZ9bsph/TV+IViKj2+Z78GFjx0qQDkPwpnXk2T/ilBqjAu8J+2rDOhlWtN 8qXE0sOdWQgYn4NRTElm5vfEa; Received: from 75-166-85-218.hlrn.qwest.net ([75.166.85.218]:36816 helo=bapiya) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1h2ODI-003usr-Dw; Fri, 08 Mar 2019 16:43:36 -0600 From: Tom Tromey To: John Baldwin Cc: Tom Tromey , gdb-patches@sourceware.org Subject: Re: [PATCH 2/9] Introduce and use language_set References: <20190307205709.21919-1-tom@tromey.com> <20190307205709.21919-3-tom@tromey.com> <6387c828-db23-3e49-fb76-699f5fc9e82b@FreeBSD.org> Date: Fri, 08 Mar 2019 15:43:35 -0700 In-Reply-To: <6387c828-db23-3e49-fb76-699f5fc9e82b@FreeBSD.org> (John Baldwin's message of "Thu, 7 Mar 2019 15:04:38 -0800") Message-ID: <87bm2ldm20.fsf@tromey.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1.91 (gnu/linux) MIME-Version: 1.0 John> Hmm, did you consider using std::bitset for langauge_set? You'd John> still have to write your own iterator class, so it wouldn't save much in terms John> of lines of code. In this case, because there are just two spots that iterate over this set, and because we'd need to introduce somewhat ugly casts back to "enum language" anyway, it seemed just as good to not write an iterator and just do this in a simpler way. Tom commit d52ac096d7ae33144eb3a691a78e061d32833444 Author: Tom Tromey Date: Fri Mar 1 19:55:46 2019 -0700 Use bitset for demangled_hash_languages I noticed that objfile_per_bfd_storage::demangled_hash_languages is a std::vector, which seemed quite large for something that, fundamentally, can be represented as a bitset. This patch reimplements it as a std::bitset. gdb/ChangeLog 2019-03-08 Tom Tromey * objfiles.h (struct objfile_per_bfd_storage) : Now a bitset. * minsyms.c (add_minsym_to_demangled_hash_table): Update. (lookup_minimal_symbol): Update. diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7ec81d36571..4c952b0a445 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2019-03-08 Tom Tromey + + * objfiles.h (struct objfile_per_bfd_storage) + : Now a bitset. + * minsyms.c (add_minsym_to_demangled_hash_table): Update. + (lookup_minimal_symbol): Update. + 2019-03-07 Tom Tromey * minsyms.h (class minimal_symbol_reader) : diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 0513cfe69f4..cbb45f141c9 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -160,11 +160,7 @@ add_minsym_to_demangled_hash_table (struct minimal_symbol *sym, unsigned int hash = search_name_hash (MSYMBOL_LANGUAGE (sym), MSYMBOL_SEARCH_NAME (sym)); - auto &vec = objfile->per_bfd->demangled_hash_languages; - auto it = std::lower_bound (vec.begin (), vec.end (), - MSYMBOL_LANGUAGE (sym)); - if (it == vec.end () || *it != MSYMBOL_LANGUAGE (sym)) - vec.insert (it, MSYMBOL_LANGUAGE (sym)); + objfile->per_bfd->demangled_hash_languages.set (MSYMBOL_LANGUAGE (sym)); struct minimal_symbol **table = objfile->per_bfd->msymbol_demangled_hash; @@ -354,8 +350,12 @@ lookup_minimal_symbol (const char *name, const char *sfile, { /* Once for each language in the demangled hash names table (usually just zero or one languages). */ - for (auto lang : objfile->per_bfd->demangled_hash_languages) + for (unsigned iter = 0; iter < nr_languages; ++iter) { + if (!objfile->per_bfd->demangled_hash_languages.test (iter)) + continue; + enum language lang = (enum language) iter; + unsigned int hash = (lookup_name.search_name_hash (lang) % MINIMAL_SYMBOL_HASH_SIZE); @@ -497,8 +497,12 @@ iterate_over_minimal_symbols /* The second pass is over the demangled table. Once for each language in the demangled hash names table (usually just zero or one). */ - for (auto lang : objf->per_bfd->demangled_hash_languages) + for (unsigned liter = 0; liter < nr_languages; ++liter) { + if (!objf->per_bfd->demangled_hash_languages.test (liter)) + continue; + + enum language lang = (enum language) liter; const language_defn *lang_def = language_def (lang); symbol_name_matcher_ftype *name_match = get_symbol_name_matcher (lang_def, lookup_name); diff --git a/gdb/objfiles.h b/gdb/objfiles.h index c5ce9eec955..47df0023dcc 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -28,6 +28,7 @@ #include "registry.h" #include "gdb_bfd.h" #include "psymtab.h" +#include #include #include "common/next-iterator.h" #include "common/safe-iterator.h" @@ -313,10 +314,8 @@ struct objfile_per_bfd_storage minimal_symbol *msymbol_demangled_hash[MINIMAL_SYMBOL_HASH_SIZE] {}; /* All the different languages of symbols found in the demangled - hash table. A flat/vector-based map is more efficient than a map - or hash table here, since this will only usually contain zero or - one entries. */ - std::vector demangled_hash_languages; + hash table. */ + std::bitset demangled_hash_languages; }; /* Master structure for keeping track of each file from which