aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2020-04-24 15:35:01 -0600
committerTom Tromey <tromey@adacore.com>2020-04-24 15:35:03 -0600
commit906bb4c58faa8e2c1c62e295f8054e75e910e5e8 (patch)
tree955841ac70ccb81d1a7515bb1e5d715589ccaf6a
parentbcfe6157ca288efed127c5efe21ad7924e0d98cf (diff)
downloadgdb-906bb4c58faa8e2c1c62e295f8054e75e910e5e8.zip
gdb-906bb4c58faa8e2c1c62e295f8054e75e910e5e8.tar.gz
gdb-906bb4c58faa8e2c1c62e295f8054e75e910e5e8.tar.bz2
Fix Rust test cases
PR rust/25025 notes that some Rust test cases fail. Debugging gdb revealed that the Rust compiler emits different linkage names that demangle to the same result. Enabling complaints when reading the test case is enough to show it: During symbol reading: Computed physname <generics::identity<f64>> does not match demangled <generics::identity> (from linkage <_ZN8generics8identity17h8540b320af6656d6E>) - DIE at 0x424 [in module /home/tromey/gdb/build/gdb/testsuite/outputs/gdb.rust/generics/generics] During symbol reading: Computed physname <generics::identity<u32>> does not match demangled <generics::identity> (from linkage <_ZN8generics8identity17hae302fad0c33bd7dE>) - DIE at 0x459 [in module /home/tromey/gdb/build/gdb/testsuite/outputs/gdb.rust/generics/generics] ... This patch changes the DWARF reader to prefer the computed physname, rather than the output of the demangler, for Rust. This fixes the bug. gdb/ChangeLog 2020-04-24 Tom Tromey <tom@tromey.com> PR rust/25025: * dwarf2/read.c (dwarf2_physname): Do not demangle for Rust.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/dwarf2/read.c3
2 files changed, 7 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 829c077..e1c64ab 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2020-04-24 Tom Tromey <tom@tromey.com>
+ PR rust/25025:
+ * dwarf2/read.c (dwarf2_physname): Do not demangle for Rust.
+
+2020-04-24 Tom Tromey <tom@tromey.com>
+
PR symtab/12707:
* dwarf2/read.c (add_partial_symbol): Use the linkage name if it
exists.
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 613c3cd..9762613 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -10318,7 +10318,8 @@ dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu)
if (!die_needs_namespace (die, cu))
return dwarf2_compute_name (name, die, cu, 1);
- mangled = dw2_linkage_name (die, cu);
+ if (cu->language != language_rust)
+ mangled = dw2_linkage_name (die, cu);
/* DW_AT_linkage_name is missing in some cases - depend on what GDB
has computed. */