From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2126) id DCFDB3858C56; Thu, 18 Jan 2024 20:37:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DCFDB3858C56 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1705610229; bh=NMLZVxSwLZu5mak8xXz7XkUWNH0GL4SaRLXhaAiTCqY=; h=From:To:Subject:Date:From; b=XxQw+aQnavGilqw5500v7QBHXdm23+FtFqMi7V4jSVDHGhJ70rB43ChPbHR3J7EGv 8iih2eZpBHWB6J9U4g1b00tQpDTT88KIsQUWOf4nVgQmHA/hcKc1BwCUutuw56D8Of yXENIOIQ7eZRBEs/aBtymwdBakSY4YEHR61Wp2xw= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Add language to cooked_index_entry X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: 374807b60751a5f890005d16dd8b466b22185a3f X-Git-Newrev: 5902fa8a555c43780dedfde1ed1a8be933b395f9 Message-Id: <20240118203709.DCFDB3858C56@sourceware.org> Date: Thu, 18 Jan 2024 20:37:06 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D5902fa8a555c= 43780dedfde1ed1a8be933b395f9 commit 5902fa8a555c43780dedfde1ed1a8be933b395f9 Author: Tom Tromey Date: Sat Dec 2 15:42:42 2023 -0700 Add language to cooked_index_entry =20 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. =20 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. Diff: --- gdb/dwarf2/cooked-index.c | 22 +++++++++++----------- gdb/dwarf2/cooked-index.h | 14 ++++++++++---- gdb/dwarf2/index-write.c | 4 ++-- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c index f15ae9c28df..54c622977b1 100644 --- a/gdb/dwarf2/cooked-index.c +++ b/gdb/dwarf2/cooked-index.c @@ -207,7 +207,7 @@ cooked_index_entry::full_name (struct obstack *storage,= bool for_main) const return local_name; =20 const char *sep =3D nullptr; - switch (per_cu->lang ()) + switch (lang) { case language_cplus: case language_rust: @@ -247,11 +247,12 @@ cooked_index_entry::write_scope (struct obstack *stor= age, =20 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, cooked_index_entry_ref parent_entry, dwarf2_per_cu_data *per_cu) { - cooked_index_entry *result =3D create (die_offset, tag, flags, name, + cooked_index_entry *result =3D create (die_offset, tag, flags, lang, nam= e, parent_entry, per_cu); m_entries.push_back (result); =20 @@ -262,7 +263,7 @@ cooked_index_shard::add (sect_offset die_offset, enum d= warf_tag tag, else if ((flags & IS_PARENT_DEFERRED) =3D=3D 0 && parent_entry.resolved =3D=3D nullptr && m_main =3D=3D nullptr - && language_may_use_plain_main (per_cu->lang ()) + && language_may_use_plain_main (lang) && strcmp (name, "main") =3D=3D 0) m_main =3D result; =20 @@ -301,7 +302,7 @@ cooked_index_shard::handle_gnat_encoded_entry (cooked_i= ndex_entry *entry, gdb::unique_xmalloc_ptr new_name =3D make_unique_xstrndup (name.data (), name.length ()); last =3D create (entry->die_offset, DW_TAG_namespace, - 0, new_name.get (), parent, + 0, language_ada, new_name.get (), parent, entry->per_cu); last->canonical =3D last->name; m_names.push_back (std::move (new_name)); @@ -364,7 +365,7 @@ cooked_index_shard::finalize () gdb_assert (entry->canonical =3D=3D nullptr); if ((entry->flags & IS_LINKAGE) !=3D 0) entry->canonical =3D entry->name; - else if (entry->per_cu->lang () =3D=3D language_ada) + else if (entry->lang =3D=3D language_ada) { gdb::unique_xmalloc_ptr canon_name =3D handle_gnat_encoded_entry (entry, gnat_entries.get ()); @@ -376,15 +377,14 @@ cooked_index_shard::finalize () m_names.push_back (std::move (canon_name)); } } - else if (entry->per_cu->lang () =3D=3D language_cplus - || entry->per_cu->lang () =3D=3D language_c) + else if (entry->lang =3D=3D language_cplus || entry->lang =3D=3D lan= guage_c) { void **slot =3D htab_find_slot (seen_names.get (), entry, INSERT); if (*slot =3D=3D nullptr) { gdb::unique_xmalloc_ptr canon_name - =3D (entry->per_cu->lang () =3D=3D language_cplus + =3D (entry->lang =3D=3D language_cplus ? cp_canonicalize_string (entry->name) : c_canonicalize_name (entry->name)); if (canon_name =3D=3D nullptr) @@ -572,7 +572,7 @@ cooked_index::get_main_name (struct obstack *obstack, e= num language *lang) if (entry =3D=3D nullptr) return nullptr; =20 - *lang =3D entry->per_cu->lang (); + *lang =3D entry->lang; return entry->full_name (obstack, true); } =20 @@ -595,7 +595,7 @@ cooked_index::get_main () const { if ((entry->flags & IS_MAIN) !=3D 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 691a027704a..6caa8132f53 100644 --- a/gdb/dwarf2/cooked-index.h +++ b/gdb/dwarf2/cooked-index.h @@ -107,12 +107,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_, cooked_index_entry_ref parent_entry_, dwarf2_per_cu_data *per_cu_) : name (name_), tag (tag_), flags (flags_), + lang (lang_), die_offset (die_offset_), per_cu (per_cu_), m_parent_entry (parent_entry_) @@ -281,6 +283,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 CU from which this entry originates. */ @@ -318,7 +322,7 @@ public: /* Create a new cooked_index_entry and register it with this object. Entries are owned by this object. The new item is returned. */ cooked_index_entry *add (sect_offset die_offset, enum dwarf_tag tag, - cooked_index_flag flags, + cooked_index_flag flags, enum language lang, const char *name, cooked_index_entry_ref parent_entry, dwarf2_per_cu_data *per_cu); @@ -370,12 +374,13 @@ private: cooked_index_entry *create (sect_offset die_offset, enum dwarf_tag tag, cooked_index_flag flags, + enum language lang, const char *name, cooked_index_entry_ref 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); } =20 @@ -439,7 +444,8 @@ public: cooked_index_entry_ref parent_entry, dwarf2_per_cu_data *per_cu) { - return m_index->add (die_offset, tag, flags, name, parent_entry, per_c= u); + return m_index->add (die_offset, tag, flags, per_cu->lang (), + name, parent_entry, per_cu); } =20 /* Install the current addrmap into the shard being constructed, diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c index 081046d4237..2decee62a4c 100644 --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -1282,7 +1282,7 @@ write_cooked_index (cooked_index *table, =20 const char *name =3D entry->full_name (symtab->obstack ()); =20 - if (entry->per_cu->lang () =3D=3D language_ada) + if (entry->lang =3D=3D 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 =3D ada_encode (name, false); name =3D obstack_strdup (symtab->obstack (), encoded.c_str ()); } - else if (entry->per_cu->lang () =3D=3D language_cplus + else if (entry->lang =3D=3D language_cplus && (entry->flags & IS_LINKAGE) !=3D 0) { /* GDB never put C++ linkage names into .gdb_index. The