diff options
author | Tom de Vries <tdevries@suse.de> | 2021-08-27 17:10:23 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2021-08-27 17:10:23 +0200 |
commit | 426f7bbfd4179a5b81f87fa324a854c370e4b07a (patch) | |
tree | 3f2fe0306d13d19a37ed01483bbb42a0dcb1eb36 | |
parent | 6a6429e19b0aa87f95cd20cb9df2715e6d3df6f1 (diff) | |
download | gdb-426f7bbfd4179a5b81f87fa324a854c370e4b07a.zip gdb-426f7bbfd4179a5b81f87fa324a854c370e4b07a.tar.gz gdb-426f7bbfd4179a5b81f87fa324a854c370e4b07a.tar.bz2 |
[gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp
Before commit 5ef670d81fd "[gdb/testsuite] Add dummy start and end CUs in
dwarf assembly" we had in exec outputs/gdb.dlang/watch-loc/watch-loc a D
compilation unit at offset 0xc7:
...
Compilation Unit @ offset 0xc7:
Length: 0x4c (32-bit)
Version: 4
Abbrev Offset: 0x64
Pointer Size: 8
<0><d2>: Abbrev Number: 2 (DW_TAG_compile_unit)
<d3> DW_AT_language : 19 (D)
...
with a corresponding .debug_aranges entry:
...
Offset into .debug_info: 0xc7
Pointer Size: 4
Segment Size: 0
Address Length
004004a7 0000000b
00000000 00000000
...
After that commit we have a dummy CU at offset 0xc7 and the D compilation unit
at offset 0xd2:
...
Compilation Unit @ offset 0xc7:
Length: 0x7 (32-bit)
Version: 4
Abbrev Offset: 0x64
Pointer Size: 8
Compilation Unit @ offset 0xd2:
Length: 0x4c (32-bit)
Version: 4
Abbrev Offset: 0x65
Pointer Size: 8
<0><dd>: Abbrev Number: 2 (DW_TAG_compile_unit)
<de> DW_AT_language : 19 (D)
...
while the .debug_aranges entry still points to 0xc7.
The problem is that the test-case uses a hack (quoting from
commit 75f06e9dc59):
...
[ Note: this is a non-trivial test-case. The file watch-loc-dw.S contains a
.debug_info section, but not an .debug_aranges section or any actual code.
The file watch-loc.c contains code and a .debug_aranges section, but no other
debug section. So, the intent for the .debug_aranges section in watch-loc.c
is to refer to a compilation unit in the .debug_info section in
watch-loc-dw.S. ]
...
and adding the dummy CU caused that hack to stop working.
Fix this by moving the generation of .debug_aranges from watch-loc.c to
watch-loc.exp, such that we have:
...
Offset into .debug_info: 0xd2
Pointer Size: 4
Segment Size: 0
Address Length
004004a7 0000000b
00000000 00000000
...
Tested on x86_64-linux.
-rw-r--r-- | gdb/testsuite/gdb.dlang/watch-loc.c | 28 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dlang/watch-loc.exp | 21 |
2 files changed, 8 insertions, 41 deletions
diff --git a/gdb/testsuite/gdb.dlang/watch-loc.c b/gdb/testsuite/gdb.dlang/watch-loc.c index 6fd7cf1..b008967 100644 --- a/gdb/testsuite/gdb.dlang/watch-loc.c +++ b/gdb/testsuite/gdb.dlang/watch-loc.c @@ -35,31 +35,3 @@ main (void) { return _Dmain (); } - -#ifdef WITH_DEBUG_SECTIONS -#define xstr(s) str(s) -#define str(s) #s -/* The .debug_names-based index support depends on .debug_aranges - generated by GCC. (.gdb_index includes a gdb-generated map - instead.) */ -asm ( -" .pushsection .debug_info,\"\",%progbits \n" -".Lcu1_begin:" -" .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 .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 -" .2byte 0 \n" -" .4byte " xstr(DMAIN_START_0) xstr(DMAIN_START_1) xstr(DMAIN_START_2) "\n" // Address -" .4byte " xstr(DMAIN_LENGTH) "\n" // Length -" .4byte 0 \n" -" .4byte 0 \n" -".Laranges_end: \n" -" .popsection \n" -); -#endif diff --git a/gdb/testsuite/gdb.dlang/watch-loc.exp b/gdb/testsuite/gdb.dlang/watch-loc.exp index 6100975..6e8b26e 100644 --- a/gdb/testsuite/gdb.dlang/watch-loc.exp +++ b/gdb/testsuite/gdb.dlang/watch-loc.exp @@ -34,7 +34,9 @@ lassign [function_range _Dmain ${srcdir}/${subdir}/${srcfile}] \ # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { - cu {} { + global dmain_start dmain_length + + cu { label cu_start } { compile_unit { {language @DW_LANG_D} } { @@ -64,21 +66,14 @@ Dwarf::assemble $asm_file { } } } -} -set dmain_start_list [split $dmain_start] -set dmain_start_0 [lindex $dmain_start_list 0] -set dmain_start_1 [lindex $dmain_start_list 1] -set dmain_start_2 [lindex $dmain_start_list 2] + aranges {} cu_start { + arange $dmain_start $dmain_length + } +} if { [prepare_for_testing "failed to prepare" ${testfile} \ - [list $srcfile $asm_file] \ - "nodebug \ - additional_flags=-DWITH_DEBUG_SECTIONS \ - additional_flags=-DDMAIN_START_0=$dmain_start_0 \ - additional_flags=-DDMAIN_START_1=$dmain_start_1 \ - additional_flags=-DDMAIN_START_2=$dmain_start_2 \ - additional_flags=-DDMAIN_LENGTH=$dmain_length"] } { + [list $srcfile $asm_file] {nodebug}] } { return -1 } |