From e382ede5ea0ef5b0e35a58ac5f67e170b1c69f2b Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 12 Jun 2024 08:26:05 -0600 Subject: Use DW_TAG_module for Ada In GCC we decided to use DW_TAG_module to represent Ada packages, so make this same decision in gdb. This also updates tag_matches_domain to handle this case. --- gdb/dwarf2/cooked-index.c | 2 +- gdb/dwarf2/index-write.c | 2 +- gdb/dwarf2/tag.h | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c index bbe14ad..5184e0c 100644 --- a/gdb/dwarf2/cooked-index.c +++ b/gdb/dwarf2/cooked-index.c @@ -358,7 +358,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, + last = create (entry->die_offset, DW_TAG_module, 0, language_ada, new_name.get (), parent, entry->per_cu); last->canonical = last->name; diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c index fc78cfd..eb81f4c 100644 --- a/gdb/dwarf2/index-write.c +++ b/gdb/dwarf2/index-write.c @@ -678,7 +678,7 @@ public: { /* These entries are synthesized by the reader, and so should not be written. */ - if (entry->lang == language_ada && entry->tag == DW_TAG_namespace) + if (entry->lang == language_ada && entry->tag == DW_TAG_module) return; m_name_to_value_set[entry->name].emplace_back (entry); diff --git a/gdb/dwarf2/tag.h b/gdb/dwarf2/tag.h index d82690b..865c2bc 100644 --- a/gdb/dwarf2/tag.h +++ b/gdb/dwarf2/tag.h @@ -135,7 +135,10 @@ tag_matches_domain (dwarf_tag tag, domain_search_flags search, language lang) break; case DW_TAG_module: - flags = SEARCH_MODULE_DOMAIN; + if (lang == language_ada) + flags = SEARCH_TYPE_DOMAIN; + else + flags = SEARCH_MODULE_DOMAIN; break; } -- cgit v1.1