[gdb/testsuite] Fix gdb.dwarf2/dw2-out-of-range-end-of-seq.exp on aarch64
authorTom de Vries <tdevries@suse.de>
Thu, 12 May 2022 08:52:32 +0000 (10:52 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 12 May 2022 08:52:32 +0000 (10:52 +0200)
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/testsuite/gdb.dwarf2/dw2-out-of-range-end-of-seq.exp

index b8da03ddb3d9988ea51fb32eb95249fdec9e23c1..f030e1edc1f4dd0c4e5411287a685d50af81e5d2 100644 (file)
@@ -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