]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix gdb.ada/extended-access.exp on riscv64-linux
authorTom de Vries <tdevries@suse.de>
Tue, 14 Oct 2025 16:09:36 +0000 (18:09 +0200)
committerTom de Vries <tdevries@suse.de>
Tue, 14 Oct 2025 16:09:36 +0000 (18:09 +0200)
On riscv64-linux, I ran into:
...
(gdb) print the_array.all^M
Cannot access memory at address 0x0^M
(gdb) FAIL: gdb.ada/extended-access.exp: print the_array.all
...

The problem is that the_array.p_array is set by a dynamic relocation:
...
0000000000002010 <array_data>:
        ...

0000000000002028 <the_array>:
        ...
                        2028: R_RISCV_RELATIVE  *ABS*+0x2010
...
which doesn't seem to get its value until we arrive in main.

Fix this by running to main before trying to print the_array.

Tested on riscv64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
gdb/testsuite/gdb.ada/extended-access.exp

index 7c02ad73f82dda209a8454816af0c475212b9b7b..c54c5f65a266cd72a9fd150765e66e3535dc9d6e 100644 (file)
@@ -21,9 +21,17 @@ if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile}]} {
     return
 }
 
+# For riscv64-linux, we need to run to main, or the_array.p_array will still
+# be nullptr.
+if {![runto "main"]} {
+  return
+}
+
 # The test case is written in C, because it was easy to make the
 # required type there without requiring a new version of GNAT.
-gdb_test_no_output "set lang ada"
+gdb_test "set lang ada" \
+    [string_to_regexp \
+        "Warning: the current language does not match this frame."]
 
 gdb_test "print the_array.all" \
     [string_to_regexp " = (93 => 23, 24, 25, 26, 27)"]