From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gateway31.websitewelcome.com (gateway31.websitewelcome.com [192.185.144.94]) by sourceware.org (Postfix) with ESMTPS id 6A091384240B for ; Sun, 28 Feb 2021 20:38:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 6A091384240B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=tom@tromey.com Received: from cm16.websitewelcome.com (cm16.websitewelcome.com [100.42.49.19]) by gateway31.websitewelcome.com (Postfix) with ESMTP id 114D620480 for ; Sun, 28 Feb 2021 14:38:11 -0600 (CST) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id GSpOlNc8e5rKQGSpOlmeFz; Sun, 28 Feb 2021 14:38:11 -0600 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type: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=LKDr6T0snRzz4wc4pJePGbcneaV7yje7rQu6tf7UaH4=; b=OA2yBH9OIC/OpIRgdwq0DKCZ/x W2zhjnKO8x2qERHKMKDuUrglopTDnvpX8oubQX9Tm3H8v6q9W4L3fL9ZAhgtvqo0pt+7PUtHNMBKj 18tnWBIggupt7+vJEx9HZM70M; Received: from 97-122-70-152.hlrn.qwest.net ([97.122.70.152]:36730 helo=localhost.localdomain) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1lGSpO-000Xf8-B8 for gdb-patches@sourceware.org; Sun, 28 Feb 2021 13:38:10 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Subject: [PATCH 09/26] Move psymbol_map out of objfile Date: Sun, 28 Feb 2021 13:37:46 -0700 Message-Id: <20210228203803.1693413-10-tom@tromey.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210228203803.1693413-1-tom@tromey.com> References: <20210228203803.1693413-1-tom@tromey.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 97.122.70.152 X-Source-L: No X-Exim-ID: 1lGSpO-000Xf8-B8 X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 97-122-70-152.hlrn.qwest.net (localhost.localdomain) [97.122.70.152]:36730 X-Source-Auth: tom+tromey.com X-Email-Count: 10 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3034.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_NEUTRAL, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Feb 2021 20:38:13 -0000 objfile::psymbol_map is used to implement a Rust feature. It is currently specific to partial symbols -- it isn't used by the DWARF indices. This patch moves it out of objfile and into psymbol_functions, adding a new method to quick_symbol_functions to handle the clearing case. This is needed because the map holds unrelocated addresses. gdb/ChangeLog 2021-02-28 Tom Tromey * quick-symbol.h (struct quick_symbol_functions) : New method. * psymtab.h (struct psymbol_functions) : New method. : Declare method. : New member. * psymtab.c (psymbol_functions::fill_psymbol_map): Rename. (psymbol_functions::find_compunit_symtab_by_address): Update. * objfiles.h (reset_psymtabs): Don't clear psymbol_map. (struct objfile) : Remove. * objfiles.c (objfile_relocate1): Update. --- gdb/ChangeLog | 14 ++++++++++++++ gdb/objfiles.c | 6 +++--- gdb/objfiles.h | 6 ------ gdb/psympriv.h | 17 +++++++++++++++++ gdb/psymtab.c | 37 +++++++++++++++++++------------------ gdb/quick-symbol.h | 7 +++++++ 6 files changed, 60 insertions(+), 27 deletions(-) diff --git a/gdb/objfiles.c b/gdb/objfiles.c index f18f6158fc3..bfa5f0443e3 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -703,9 +703,9 @@ objfile_relocate1 (struct objfile *objfile, } } - /* This stores relocated addresses and so must be cleared. This - will cause it to be recreated on demand. */ - objfile->psymbol_map.clear (); + /* Notify the quick symbol object. */ + if (objfile->qf) + objfile->qf->relocated (); /* Relocate isolated symbols. */ { diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 7235713cbdf..cd136eef788 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -459,7 +459,6 @@ struct objfile void reset_psymtabs () { - psymbol_map.clear (); partial_symtabs.reset (new psymtab_storage ()); } @@ -665,11 +664,6 @@ struct objfile struct obstack objfile_obstack {}; - /* Map symbol addresses to the partial symtab that defines the - object at that address. */ - - std::vector> psymbol_map; - /* Structure which keeps track of functions that manipulate objfile's of the same type as this objfile. I.e. the function to read partial symbols for example. Note that this structure is in statically diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 6b9ee184e9c..73f00a50992 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -535,6 +535,23 @@ struct psymbol_functions : public quick_symbol_functions void map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun, void *data, int need_fullname) override; + + void relocated () override + { + m_psymbol_map.clear (); + } + +private: + + void fill_psymbol_map (struct objfile *objfile, + struct partial_symtab *psymtab, + std::set *seen_addrs, + const std::vector &symbols); + + /* Map symbol addresses to the partial symtab that defines the + object at that address. */ + + std::vector> m_psymbol_map; }; #endif /* PSYMPRIV_H */ diff --git a/gdb/psymtab.c b/gdb/psymtab.c index c022daa7894..45a4db71c1f 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1346,13 +1346,14 @@ psymbol_functions::has_symbols (struct objfile *objfile) } /* Helper function for psym_find_compunit_symtab_by_address that fills - in psymbol_map for a given range of psymbols. */ + in m_psymbol_map for a given range of psymbols. */ -static void -psym_fill_psymbol_map (struct objfile *objfile, - struct partial_symtab *psymtab, - std::set *seen_addrs, - const std::vector &symbols) +void +psymbol_functions::fill_psymbol_map + (struct objfile *objfile, + struct partial_symtab *psymtab, + std::set *seen_addrs, + const std::vector &symbols) { for (partial_symbol *psym : symbols) { @@ -1362,7 +1363,7 @@ psym_fill_psymbol_map (struct objfile *objfile, if (seen_addrs->find (addr) == seen_addrs->end ()) { seen_addrs->insert (addr); - objfile->psymbol_map.emplace_back (addr, psymtab); + m_psymbol_map.emplace_back (addr, psymtab); } } } @@ -1375,23 +1376,23 @@ compunit_symtab * psymbol_functions::find_compunit_symtab_by_address (struct objfile *objfile, CORE_ADDR address) { - if (objfile->psymbol_map.empty ()) + if (m_psymbol_map.empty ()) { std::set seen_addrs; for (partial_symtab *pst : require_partial_symbols (objfile, true)) { - psym_fill_psymbol_map (objfile, pst, - &seen_addrs, - pst->global_psymbols); - psym_fill_psymbol_map (objfile, pst, - &seen_addrs, - pst->static_psymbols); + fill_psymbol_map (objfile, pst, + &seen_addrs, + pst->global_psymbols); + fill_psymbol_map (objfile, pst, + &seen_addrs, + pst->static_psymbols); } - objfile->psymbol_map.shrink_to_fit (); + m_psymbol_map.shrink_to_fit (); - std::sort (objfile->psymbol_map.begin (), objfile->psymbol_map.end (), + std::sort (m_psymbol_map.begin (), m_psymbol_map.end (), [] (const std::pair &a, const std::pair &b) { @@ -1400,14 +1401,14 @@ psymbol_functions::find_compunit_symtab_by_address (struct objfile *objfile, } auto iter = std::lower_bound - (objfile->psymbol_map.begin (), objfile->psymbol_map.end (), address, + (m_psymbol_map.begin (), m_psymbol_map.end (), address, [] (const std::pair &a, CORE_ADDR b) { return a.first < b; }); - if (iter == objfile->psymbol_map.end () || iter->first != address) + if (iter == m_psymbol_map.end () || iter->first != address) return NULL; return psymtab_to_symtab (objfile, iter->second); diff --git a/gdb/quick-symbol.h b/gdb/quick-symbol.h index 85e7a32eacd..319ffe681c8 100644 --- a/gdb/quick-symbol.h +++ b/gdb/quick-symbol.h @@ -228,6 +228,13 @@ struct quick_symbol_functions virtual void map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun, void *data, int need_fullname) = 0; + + /* This is called when the objfile is relocated. It can be used to + clean up any internal caches. */ + virtual void relocated () + { + /* Do nothing. */ + } }; typedef std::unique_ptr quick_symbol_functions_up; -- 2.26.2