[gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp
authorTom de Vries <tdevries@suse.de>
Fri, 27 Aug 2021 15:10:23 +0000 (17:10 +0200)
committerTom de Vries <tdevries@suse.de>
Fri, 27 Aug 2021 15:10:23 +0000 (17:10 +0200)
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.

gdb/testsuite/gdb.dlang/watch-loc.c
gdb/testsuite/gdb.dlang/watch-loc.exp

index 6fd7cf135d5bc98791649f8d49877876346703dd..b008967381bf5cdc47230fc991a65d7b56577919 100644 (file)
@@ -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
index 6100975b98606c7fc2e4c9668f49dec9eb40e1d9..6e8b26e3109569818cca740ea740185bf0ce6a18 100644 (file)
@@ -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
 }