public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] [gdb/testsuite] Fix .debug_ranges in gdb.mi/dw2-ref-missing-frame-func.c
@ 2020-04-22 12:38 Tom de Vries
  0 siblings, 0 replies; only message in thread
From: Tom de Vries @ 2020-04-22 12:38 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=54ac3df1adbf7b4b3470a8df08caa0aea4c89616

commit 54ac3df1adbf7b4b3470a8df08caa0aea4c89616
Author: Tom de Vries <tdevries@suse.de>
Date:   Wed Apr 22 14:38:35 2020 +0200

    [gdb/testsuite] Fix .debug_ranges in gdb.mi/dw2-ref-missing-frame-func.c
    
    While investigating PR25862 (an assertion failure with target board
    cc-with-debug-names), I noticed that the .debug_aranges section in
    gdb.mi/dw2-ref-missing-frame-func.c contains a hardcoded 0:
    ...
    "      .4byte  0 \n" // .Ldebug_info0 - Offset of Compilation Unit Info
    ...
    
    So when looking for an address in the range 0x4004a7-0x4004bf, we should find
    the CU at 0xc7:
    ...
      Compilation Unit @ offset 0xc7:
       Length:        0xba (32-bit)
       Version:       2
       Abbrev Offset: 0x64
       Pointer Size:  4
     <0><d2>: Abbrev Number: 1 (DW_TAG_compile_unit)
        <d3>   DW_AT_high_pc     : 0x4004bf
        <d7>   DW_AT_low_pc      : 0x4004a7
        <db>   DW_AT_name        : file1.txt
        <e5>   DW_AT_producer    : GNU C 3.3.3
        <f1>   DW_AT_language    : 1        (ANSI C)
    ...
    but instead the .debug_aranges entry points us to the CU at 0x0:
    ...
      Length:                   28
      Version:                  2
      Offset into .debug_info:  0x0
      Pointer Size:             4
      Segment Size:             0
    
        Address    Length
        004004a7 00000018
        00000000 00000000
    ...
    
    Fix this by using a label to refer to the start of the CU, similar to how
    that's done for gdb.dlang/watch-loc.c in the fix for PR24522:
    ...
    "      .4byte  .Lcu1_begin\n" // .Ldebug_info0 - Offset of Compilation Unit Info
    ...
    
    The label marks the start of the empty .debug_info section for
    dw2-ref-missing-frame-func.c, which is supposed to merge with the .debug_info
    section in dw2-ref-missing-frame.S, so in order for that to work, we need to
    make sure dw2-ref-missing-frame-func.o comes before dw2-ref-missing-frame.o in
    the link line.
    
    Tested on x86_64-linux.
    
    gdb/testsuite/ChangeLog:
    
    2020-04-22  Tom de Vries  <tdevries@suse.de>
    
            * gdb.mi/dw2-ref-missing-frame-func.c (.debug_aranges): Fix
            debug_info_offset.
            * gdb.mi/dw2-ref-missing-frame.exp: Make sure $objfuncfile comes
            before $objsfile in the line line.

Diff:
---
 gdb/testsuite/ChangeLog                           | 7 +++++++
 gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c | 5 ++++-
 gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp    | 2 +-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 33ba594e19a..5700fa81e28 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2020-04-22  Tom de Vries  <tdevries@suse.de>
+
+	* gdb.mi/dw2-ref-missing-frame-func.c (.debug_aranges): Fix
+	debug_info_offset.
+	* gdb.mi/dw2-ref-missing-frame.exp: Make sure $objfuncfile comes
+	before $objsfile in the line line.
+
 2020-04-22  Tom de Vries  <tdevries@suse.de>
 
 	* gdb.dlang/watch-loc.c (.debug_aranges): Fix _Dmain length.
diff --git a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c
index e3aed56c920..6d68b5b99cf 100644
--- a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c
+++ b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame-func.c
@@ -57,11 +57,14 @@ asm ("cu_text_end:");
    generated by GCC.  (.gdb_index includes a gdb-generated map
    instead.)  */
 asm (
+"       .pushsection    .debug_info,\"\",%progbits \n"
+".Lcu1_begin: \n"
+"       .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	0 \n" // .Ldebug_info0 - Offset of Compilation Unit Info
+"	.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
diff --git a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp
index f099054a2d2..01f1960230f 100644
--- a/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp
+++ b/gdb/testsuite/gdb.mi/dw2-ref-missing-frame.exp
@@ -30,7 +30,7 @@ set objmainfile [standard_output_file ${testfile}-main.o]
 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $objsfile object {}] != ""
      || [gdb_compile "${srcdir}/${subdir}/${srcfile2}" $objfuncfile object {}] != ""
      || [gdb_compile "${srcdir}/${subdir}/${srcfile3}" $objmainfile object {debug}] != ""
-     || [gdb_compile "$objsfile $objfuncfile $objmainfile" $binfile executable {}] != "" } {
+     || [gdb_compile "$objfuncfile $objsfile $objmainfile" $binfile executable {}] != "" } {
     return -1
 }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-04-22 12:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-22 12:38 [binutils-gdb] [gdb/testsuite] Fix .debug_ranges in gdb.mi/dw2-ref-missing-frame-func.c Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).