When running gdb.dwarf2/nonvar-access.exp with board readnow, we have:
...
FAIL: gdb.dwarf2/nonvar-access.exp: print/x def_implicit_s
...
and 12 more similar failures.
I've tracked this down to the range of main being hardcoded to
[_main, _main+0x10000) in the dwarf assembly:
...
DW_TAG_subprogram {
{name main}
{DW_AT_external 1 flag}
{low_pc [gdb_target_symbol main] DW_FORM_addr}
{high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr}
} {
...
which overlaps with the .debug_info for the elf-init.c CU (containing
__libc_csu_init and __libc_csu_fini).
Fix this by using function_range to find the actual range of main.
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2019-06-11 Tom de Vries <tdevries@suse.de>
PR testsuite/24521
* gdb.dwarf2/nonvar-access.exp: Fix main high_pc.
+2019-06-11 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/24521
+ * gdb.dwarf2/nonvar-access.exp: Fix main high_pc.
+
2019-06-11 Tom de Vries <tdevries@suse.de>
* boards/readnow.exp: New file.
set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
+ global srcdir subdir srcfile
+
+ set range [function_range main ${srcdir}/${subdir}/${srcfile}]
+ set main_start [lindex $range 0]
+ set main_length [lindex $range 1]
+
cu {} {
compile_unit {
{DW_AT_name main.c}
{name main}
{DW_AT_external 1 flag}
{low_pc [gdb_target_symbol main] DW_FORM_addr}
- {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr}
+ {high_pc "$main_start + $main_length" DW_FORM_addr}
} {
# Simple variable without location.
DW_TAG_variable {