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>
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)"]