diff options
author | Tom de Vries <tdevries@suse.de> | 2020-04-22 14:38:35 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2020-04-22 14:38:35 +0200 |
commit | 54ac3df1adbf7b4b3470a8df08caa0aea4c89616 (patch) | |
tree | 0fea6d898d24b7e8654f38de6a0b9ec389a50070 /gdb | |
parent | 1d934d768573dc3e54f32d21f13e962718fcd47f (diff) | |
download | gdb-54ac3df1adbf7b4b3470a8df08caa0aea4c89616.zip gdb-54ac3df1adbf7b4b3470a8df08caa0aea4c89616.tar.gz gdb-54ac3df1adbf7b4b3470a8df08caa0aea4c89616.tar.bz2 |
[gdb/testsuite] Fix .debug_ranges in gdb.mi/dw2-ref-missing-frame-func.c
While investigating PR25862 (an assertion failure with target board
cc-with-debug-names), I noticed that the .debug_aranges section in
gdb.mi/dw2-ref-missing-frame-func.c contains a hardcoded 0:
...
" .4byte 0 \n" // .Ldebug_info0 - Offset of Compilation Unit Info
...
So when looking for an address in the range 0x4004a7-0x4004bf, we should find
the CU at 0xc7:
...
Compilation Unit @ offset 0xc7:
Length: 0xba (32-bit)
Version: 2
Abbrev Offset: 0x64
Pointer Size: 4
<0><d2>: Abbrev Number: 1 (DW_TAG_compile_unit)
<d3> DW_AT_high_pc : 0x4004bf
<d7> DW_AT_low_pc : 0x4004a7
<db> DW_AT_name : file1.txt
<e5> DW_AT_producer : GNU C 3.3.3
<f1> DW_AT_language : 1 (ANSI C)
...
but instead the .debug_aranges entry points us to the CU at 0x0:
...
Length: 28
Version: 2
Offset into .debug_info: 0x0
Pointer Size: 4
Segment Size: 0
Address Length
004004a7 00000018
00000000 00000000
...
Fix this by using a label to refer to the start of the CU, similar to how
that's done for gdb.dlang/watch-loc.c in the fix for PR24522:
...
" .4byte .Lcu1_begin\n" // .Ldebug_info0 - Offset of Compilation Unit Info
...
The label marks the start of the empty .debug_info section for
dw2-ref-missing-frame-func.c, which is supposed to merge with the .debug_info
section in dw2-ref-missing-frame.S, so in order for that to work, we need to
make sure dw2-ref-missing-frame-func.o comes before dw2-ref-missing-frame.o in
the link line.
Tested on x86_64-linux.
gdb/testsuite/ChangeLog:
2020-04-22 Tom de Vries <tdevries@suse.de>
* gdb.mi/dw2-ref-missing-frame-func.c (.debug_aranges): Fix
debug_info_offset.
* gdb.mi/dw2-ref-missing-frame.exp: Make sure $objfuncfile comes
before $objsfile in the line line.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp | 2 |
3 files changed, 12 insertions, 2 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 33ba594..5700fa8 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2020-04-22 Tom de Vries <tdevries@suse.de> + * gdb.mi/dw2-ref-missing-frame-func.c (.debug_aranges): Fix + debug_info_offset. + * gdb.mi/dw2-ref-missing-frame.exp: Make sure $objfuncfile comes + before $objsfile in the line line. + +2020-04-22 Tom de Vries <tdevries@suse.de> + * gdb.dlang/watch-loc.c (.debug_aranges): Fix _Dmain length. 2020-02-18 Mihails Strasuns <mihails.strasuns@intel.com> diff --git a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c index e3aed56..6d68b5b 100644 --- a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c +++ b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c @@ -57,11 +57,14 @@ asm ("cu_text_end:"); generated by GCC. (.gdb_index includes a gdb-generated map instead.) */ asm ( +" .pushsection .debug_info,\"\",%progbits \n" +".Lcu1_begin: \n" +" .popsection \n" " .pushsection .debug_aranges,\"\",%progbits \n" " .4byte .Laranges_end - .Laranges_start \n" // Length of Address Ranges Info ".Laranges_start: \n" " .2byte 0x2 \n" // DWARF Version -" .4byte 0 \n" // .Ldebug_info0 - Offset of Compilation Unit Info +" .4byte .Lcu1_begin\n" // .Ldebug_info0 - Offset of Compilation Unit Info " .byte 4 \n" // Size of Address " .byte 0 \n" // Size of Segment Descriptor " .2byte 0 \n" // Pad to 16 byte boundary diff --git a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp index f099054..01f1960 100644 --- a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp +++ b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp @@ -30,7 +30,7 @@ set objmainfile [standard_output_file ${testfile}-main.o] if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $objsfile object {}] != "" || [gdb_compile "${srcdir}/${subdir}/${srcfile2}" $objfuncfile object {}] != "" || [gdb_compile "${srcdir}/${subdir}/${srcfile3}" $objmainfile object {debug}] != "" - || [gdb_compile "$objsfile $objfuncfile $objmainfile" $binfile executable {}] != "" } { + || [gdb_compile "$objfuncfile $objsfile $objmainfile" $binfile executable {}] != "" } { return -1 } |