From: Tom de Vries Date: Fri, 27 Aug 2021 15:10:23 +0000 (+0200) Subject: [gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=426f7bbfd4179a5b81f87fa324a854c370e4b07a;p=binutils-gdb.git [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>: Abbrev Number: 2 (DW_TAG_compile_unit) 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>
: Abbrev Number: 2 (DW_TAG_compile_unit) 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. --- diff --git a/gdb/testsuite/gdb.dlang/watch-loc.c b/gdb/testsuite/gdb.dlang/watch-loc.c index 6fd7cf135d5..b008967381b 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 6100975b986..6e8b26e3109 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 }