[PATCH][gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp

Tom de Vries tdevries@suse.de
Thu Aug 26 11:57:10 GMT 2021


Hi,

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.

Any comments?

Thanks,
- Tom

[gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp

---
 gdb/testsuite/gdb.dlang/watch-loc.c   | 28 ----------------------------
 gdb/testsuite/gdb.dlang/watch-loc.exp | 22 +++++++++-------------
 2 files changed, 9 insertions(+), 41 deletions(-)

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..0ba2d89e15a 100644
--- a/gdb/testsuite/gdb.dlang/watch-loc.exp
+++ b/gdb/testsuite/gdb.dlang/watch-loc.exp
@@ -34,7 +34,10 @@ 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
+
+    declare_labels cu_start
+    cu { label cu_start } {
 	compile_unit {
 	    {language @DW_LANG_D}
 	} {
@@ -64,21 +67,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
 }
 


More information about the Gdb-patches mailing list