From patchwork Sun Dec 10 16:44:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 81823 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5E37038582B0 for ; Sun, 10 Dec 2023 16:46:24 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from omta40.uswest2.a.cloudfilter.net (omta40.uswest2.a.cloudfilter.net [35.89.44.39]) by sourceware.org (Postfix) with ESMTPS id B9F9E385843A for ; Sun, 10 Dec 2023 16:45:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B9F9E385843A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B9F9E385843A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=35.89.44.39 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702226709; cv=none; b=adyJsIQC/IuRpMmNK5v0yoic4P8N6g3RjLSIc3id9FPP5ewz3Q0uQ2IXI3adAM3bC5I75F70bS9gQ7QZ1QmL1T6inWtLD/QqqIlwAJTsTXENHYlwsDGCEymj5cB6bad9aBDEMQYQlB+SlrljK3WfClvG6kculnIeGxVkuUjD+ME= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702226709; c=relaxed/simple; bh=Y2O241y68Xq7fnA4mMDiRlahvusvGlRXAVYvSjVUOlE=; h=DKIM-Signature:From:Date:Subject:MIME-Version:Message-Id:To; b=dXI1/haJAKKs+vdJOH5s8PdzPxVXjyIcEeaP1tfwkjN+anQ768IA1B8zGC22vesDi95tm5vB37DWKqPDXiOTybh9jQp//pMap2vnyGoDMnXcDdV5N6RH0lgpOQXrl/SwJrP1Tx5tKIvlKgbbCr9nnMMMJTWYHsNRYPseZctk7/k= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from eig-obgw-5007a.ext.cloudfilter.net ([10.0.29.141]) by cmsmtp with ESMTPS id CCrDrAUKTL9AgCMvQrXN5q; Sun, 10 Dec 2023 16:45:04 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id CMvPrggDQqkaTCMvPrWB7Q; Sun, 10 Dec 2023 16:45:04 +0000 X-Authority-Analysis: v=2.4 cv=bY547cDB c=1 sm=1 tr=0 ts=6575eb10 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=OWjo9vPv0XrRhIrVQ50Ab3nP57M=:19 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=IkcTkHD0fZMA:10 a=e2cXIFwxEfEA:10 a=Qbun_eYptAEA:10 a=3KFe8QfOize0Z1kva84A:9 a=QEXdDO2ut3YA:10 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=To:In-Reply-To:References:Message-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:Subject:Date:From:Sender:Reply-To:Cc: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=ltlgnDDCIB8RibCG1eanalguaGCnFDi3lKhr5RY+MSs=; b=fqscOCfxwrkv4p+aok62Qscar9 Zj7ymI/Oerak7fzxP1vKqps1vLP7wxv+TvhH4WltUv/EhrK5zW9Xz5QnE3xQaB089m6JBR5NpOkew KoX46JKp4dC+mqwy0g9eGx3xx; Received: from [198.59.47.65] (port=52394 helo=[192.168.131.83]) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from ) id 1rCMvO-001rpu-39 for gdb-patches@sourceware.org; Sun, 10 Dec 2023 09:45:03 -0700 From: Tom Tromey Date: Sun, 10 Dec 2023 09:44:55 -0700 Subject: [PATCH 06/17] Add language to cooked_index_entry MIME-Version: 1.0 Message-Id: <20231210-debug-names-fix-v1-6-a8f6d2525018@tromey.com> References: <20231210-debug-names-fix-v1-0-a8f6d2525018@tromey.com> In-Reply-To: <20231210-debug-names-fix-v1-0-a8f6d2525018@tromey.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.4 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: 198.59.47.65 X-Source-L: No X-Exim-ID: 1rCMvO-001rpu-39 X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: ([192.168.131.83]) [198.59.47.65]:52394 X-Source-Auth: tom+tromey.com X-Email-Count: 7 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfNQxXd1nzYUkOrVv2Y9/jLQ94mgTwRoc1x36g1QiKWIVlaNBVSH3PYrITdRwMTgq4+RhmW89f3WBDVR1ZvQU2jqwE8z36TqvP+wdJYZpEAuc7DyiAX8a vwE1uBqTz7t2JItTSsEvcVl7CxBhxHWyVuK/Afe3IiJywwvu/x4oXBNtE90gydOCGoZ4UnnbamQ6iNtt4KyboAUiR98Rf2OUgw0= X-Spam-Status: No, score=-3024.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org This adds a new 'lang' member to cooked_index_entry. This holds the language of the symbol. This is primarily useful for the new .debug_names reader, which will not scan the CUs for languages up front. This also changes cooked_index_shard::add to return a non-const pointer. This doesn't impact the current code, but is needed for the new reader. --- gdb/dwarf2/cooked-index.c | 24 ++++++++++++------------ gdb/dwarf2/cooked-index.h | 32 +++++++++++++++++++------------- gdb/dwarf2/index-write.c | 4 ++-- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c index e59835ea11f..d32fb360a4b 100644 --- a/gdb/dwarf2/cooked-index.c +++ b/gdb/dwarf2/cooked-index.c @@ -206,7 +206,7 @@ cooked_index_entry::full_name (struct obstack *storage, bool for_main) const return local_name; const char *sep = nullptr; - switch (per_cu->lang ()) + switch (lang) { case language_cplus: case language_rust: @@ -244,13 +244,14 @@ cooked_index_entry::write_scope (struct obstack *storage, /* See cooked-index.h. */ -const cooked_index_entry * +cooked_index_entry * cooked_index_shard::add (sect_offset die_offset, enum dwarf_tag tag, - cooked_index_flag flags, const char *name, + cooked_index_flag flags, enum language lang, + const char *name, const cooked_index_entry *parent_entry, dwarf2_per_cu_data *per_cu) { - cooked_index_entry *result = create (die_offset, tag, flags, name, + cooked_index_entry *result = create (die_offset, tag, flags, lang, name, parent_entry, per_cu); m_entries.push_back (result); @@ -260,7 +261,7 @@ cooked_index_shard::add (sect_offset die_offset, enum dwarf_tag tag, m_main = result; else if (parent_entry == nullptr && m_main == nullptr - && language_may_use_plain_main (per_cu->lang ()) + && language_may_use_plain_main (lang) && strcmp (name, "main") == 0) m_main = result; @@ -299,7 +300,7 @@ cooked_index_shard::handle_gnat_encoded_entry (cooked_index_entry *entry, gdb::unique_xmalloc_ptr new_name = make_unique_xstrndup (name.data (), name.length ()); last = create (entry->die_offset, DW_TAG_namespace, - 0, new_name.get (), parent, + 0, language_ada, new_name.get (), parent, entry->per_cu); last->canonical = last->name; m_names.push_back (std::move (new_name)); @@ -362,7 +363,7 @@ cooked_index_shard::finalize () gdb_assert (entry->canonical == nullptr); if ((entry->flags & IS_LINKAGE) != 0) entry->canonical = entry->name; - else if (entry->per_cu->lang () == language_ada) + else if (entry->lang == language_ada) { gdb::unique_xmalloc_ptr canon_name = handle_gnat_encoded_entry (entry, gnat_entries.get ()); @@ -374,15 +375,14 @@ cooked_index_shard::finalize () m_names.push_back (std::move (canon_name)); } } - else if (entry->per_cu->lang () == language_cplus - || entry->per_cu->lang () == language_c) + else if (entry->lang == language_cplus || entry->lang == language_c) { void **slot = htab_find_slot (seen_names.get (), entry, INSERT); if (*slot == nullptr) { gdb::unique_xmalloc_ptr canon_name - = (entry->per_cu->lang () == language_cplus + = (entry->lang == language_cplus ? cp_canonicalize_string (entry->name) : c_canonicalize_name (entry->name)); if (canon_name == nullptr) @@ -570,7 +570,7 @@ cooked_index::get_main_name (struct obstack *obstack, enum language *lang) if (entry == nullptr) return nullptr; - *lang = entry->per_cu->lang (); + *lang = entry->lang; return entry->full_name (obstack, true); } @@ -593,7 +593,7 @@ cooked_index::get_main () const { if ((entry->flags & IS_MAIN) != 0) { - if (!language_requires_canonicalization (entry->per_cu->lang ())) + if (!language_requires_canonicalization (entry->lang)) { /* There won't be one better than this. */ return entry; diff --git a/gdb/dwarf2/cooked-index.h b/gdb/dwarf2/cooked-index.h index 323c335677b..4e7882204a9 100644 --- a/gdb/dwarf2/cooked-index.h +++ b/gdb/dwarf2/cooked-index.h @@ -85,12 +85,14 @@ extern bool language_requires_canonicalization (enum language lang); struct cooked_index_entry : public allocate_on_obstack { cooked_index_entry (sect_offset die_offset_, enum dwarf_tag tag_, - cooked_index_flag flags_, const char *name_, + cooked_index_flag flags_, + enum language lang_, const char *name_, const cooked_index_entry *parent_entry_, dwarf2_per_cu_data *per_cu_) : name (name_), tag (tag_), flags (flags_), + lang (lang_), die_offset (die_offset_), parent_entry (parent_entry_), per_cu (per_cu_) @@ -229,6 +231,8 @@ struct cooked_index_entry : public allocate_on_obstack enum dwarf_tag tag; /* Any flags attached to this entry. */ cooked_index_flag flags; + /* The language of this symbol. */ + ENUM_BITFIELD (language) lang : LANGUAGE_BITS; /* The offset of this DIE. */ sect_offset die_offset; /* The parent entry. This is NULL for top-level entries. @@ -264,11 +268,11 @@ class cooked_index_shard /* Create a new cooked_index_entry and register it with this object. Entries are owned by this object. The new item is returned. */ - const cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag, - cooked_index_flag flags, - const char *name, - const cooked_index_entry *parent_entry, - dwarf2_per_cu_data *per_cu); + cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag, + cooked_index_flag flags, enum language lang, + const char *name, + const cooked_index_entry *parent_entry, + dwarf2_per_cu_data *per_cu); /* Install a new fixed addrmap from the given mutable addrmap. */ void install_addrmap (addrmap_mutable *map) @@ -316,12 +320,13 @@ class cooked_index_shard cooked_index_entry *create (sect_offset die_offset, enum dwarf_tag tag, cooked_index_flag flags, + enum language lang, const char *name, const cooked_index_entry *parent_entry, dwarf2_per_cu_data *per_cu) { return new (&m_storage) cooked_index_entry (die_offset, tag, flags, - name, parent_entry, + lang, name, parent_entry, per_cu); } @@ -379,13 +384,14 @@ class cooked_index_storage /* Add an entry to the index. The arguments describe the entry; see cooked-index.h. The new entry is returned. */ - const cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag, - cooked_index_flag flags, - const char *name, - const cooked_index_entry *parent_entry, - dwarf2_per_cu_data *per_cu) + cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag, + cooked_index_flag flags, + const char *name, + const cooked_index_entry *parent_entry, + dwarf2_per_cu_data *per_cu) { - return m_index->add (die_offset, tag, flags, name, parent_entry, per_cu); + return m_index->add (die_offset, tag, flags, per_cu->lang (), + name, parent_entry, per_cu); } /* Install the current addrmap into the shard being constructed, diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c index b4a0117330e..44728e4216d 100644 --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -1282,7 +1282,7 @@ write_cooked_index (cooked_index *table, const char *name = entry->full_name (symtab->obstack ()); - if (entry->per_cu->lang () == language_ada) + if (entry->lang == language_ada) { /* In order for the index to work when read back into gdb, it has to use the encoded name, with any @@ -1290,7 +1290,7 @@ write_cooked_index (cooked_index *table, std::string encoded = ada_encode (name, false); name = obstack_strdup (symtab->obstack (), encoded.c_str ()); } - else if (entry->per_cu->lang () == language_cplus + else if (entry->lang == language_cplus && (entry->flags & IS_LINKAGE) != 0) { /* GDB never put C++ linkage names into .gdb_index. The