]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add another minor hack to cooked_index_entry::full_name
authorTom Tromey <tom@tromey.com>
Mon, 10 Mar 2025 21:52:17 +0000 (15:52 -0600)
committerTom Tromey <tom@tromey.com>
Wed, 10 Sep 2025 22:05:27 +0000 (16:05 -0600)
This patch adds another minor hack to cooked_index_entry::full_name.
In particular, if GNAT emits non-hierarchical names (still the default
as the hierarchical series is blocked on one tricky problem), then a
request to compute the "linkage-style" name will now just return the
'name' field.

Without this tweak, this series would regress ada-cold-name.exp,
because the search would look for "name.cold" but the index would
return "name[cold]" as the "linkage" name (which would be wrong).

This area is a bit difficult to unravel.  The best plan here, IMO, is
to change Ada to work like the other languages in gdb: store the
natural name and do searches with that name.  I think this is
achievable, but I didn't want to try it here.

I've updated the relevant bug (tagged below) to reflect this.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32766
Acked-By: Simon Marchi <simon.marchi@efficios.com>
gdb/dwarf2/cooked-index-entry.c

index a5e3fcb6caaad517f4b7a2033c234c7688ee70bc..0482b640f85e5a60273cc13d7af64144a051a4d6 100644 (file)
@@ -188,8 +188,15 @@ cooked_index_entry::full_name (struct obstack *storage,
       break;
 
     case language_ada:
+      /* If GNAT emits hierarchical names (patches not in at the time
+        of writing), then we need to compute the linkage name here.
+        However for traditional GNAT, the linkage name will be in
+        'name'.  Detect this by looking for "__"; see also
+        cooked_index_shard::finalize.  */
       if ((name_flags & FOR_ADA_LINKAGE_NAME) != 0)
        {
+         if (strstr (name, "__") != nullptr)
+           return name;
          sep = "__";
          break;
        }