From de51bd9106f64eb26c587c384382a2c7da7a78ae Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Thu, 12 May 2022 10:52:32 +0200 Subject: [PATCH] [gdb/testsuite] Fix gdb.dwarf2/dw2-out-of-range-end-of-seq.exp on aarch64 On aarch64-linux, with test-case gdb.dwarf2/dw2-out-of-range-end-of-seq.exp I run into: ... (gdb) run ^M Starting program: dw2-out-of-range-end-of-seq ^M ^M Program received signal SIGILL, Illegal instruction.^M main () at src/gdb/testsuite/gdb.dwarf2/main.c:1^M 1 /* This testcase is part of GDB, the GNU debugger.^M (gdb) FAIL: gdb.dwarf2/dw2-out-of-range-end-of-seq.exp: runto: run to main ... There are two problems here: - the test-case contains a hardcoded "DW_LNS_advance_pc 1" which causes the breakpoint pointing in the middle of an insn - the FAIL triggers on aarch64-linux, but not on x86_64-linux, because the test-case uses 'main_label' as the address of the first and only valid entry in the line table, and: - on aarch64-linux, there's no prologue, so main_label and main coincide, while - on x86_64-linux, there's a prologue, so main_label is different from main. Fix these problems by: - eliminating the use of "DW_LNS_advance_pc 1", and using "DW_LNE_set_address $main_end" instead, and - eliminating the use of main_label, using "DW_LNE_set_address $main_start" instead. Tested on both x86_64-linux and aarch64-linux. --- .../gdb.dwarf2/dw2-out-of-range-end-of-seq.exp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp b/gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp index b8da03ddb3d..f030e1edc1f 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp +++ b/gdb/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp @@ -35,10 +35,16 @@ if !$gcc_compiled { standard_testfile main.c -dw.S +set func_info_vars [get_func_info main] + set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { declare_labels Llines global srcdir subdir srcfile + global func_info_vars + foreach var $func_info_vars { + global $var + } cu {} { compile_unit { @@ -48,7 +54,9 @@ Dwarf::assemble $asm_file { } { subprogram { {external 1 flag} - {MACRO_AT_func {main}} + {name main} + {low_pc $main_start} + {high_pc $main_end addr} } } } @@ -58,11 +66,11 @@ Dwarf::assemble $asm_file { file_name "$srcfile" 1 program { - DW_LNE_set_address main_label + DW_LNE_set_address $main_start line 1 DW_LNS_copy - DW_LNS_advance_pc 1 + DW_LNE_set_address $main_end DW_LNE_end_sequence DW_LNE_set_address 0 -- 2.30.2