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.
{
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
# 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}
} {
}
}
}
-}
-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
}