[01/28] Add another minor hack to cooked_index_entry::full_name

Message ID 20250311-search-in-psyms-v1-1-d73d9be20983@tromey.com
State New
Headers
Series Search symbols via quick API |

Commit Message

Tom Tromey March 11, 2025, 2:12 p.m. UTC
  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
---
 gdb/dwarf2/cooked-index.c | 7 +++++++
 1 file changed, 7 insertions(+)
  

Patch

diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c
index 866a07ce8a0d183c365dd809c045951b7df15418..9533a20e6c48cd164f1de853f1071ce5cb00ca88 100644
--- a/gdb/dwarf2/cooked-index.c
+++ b/gdb/dwarf2/cooked-index.c
@@ -240,8 +240,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;
 	}