From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id DC6373857C74 for ; Wed, 16 Sep 2020 16:05:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DC6373857C74 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 3BEBAB225; Wed, 16 Sep 2020 16:06:04 +0000 (UTC) Date: Wed, 16 Sep 2020 18:05:47 +0200 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [committed][gdb/testsuite] Fix gdb.dlang/watch-loc.exp on ppc64 Message-ID: <20200916160546.GA11253@delia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_NUMSUBJECT, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Sep 2020 16:05:51 -0000 Hi, On ppc64, we run into: ... /tmp/ccKXURmw.s: Assembler messages:^M /tmp/ccKXURmw.s:99: Error: can't resolve \ `_Dmain_end' {.text section} - `_Dmain' {.opd section}^M compiler exited with status 1 ... The unresolvable entity comes from the .debug_aranges section hardcoded in watch-loc.c: ... " .4byte _Dmain \n" // Address " .4byte _Dmain_end - _Dmain \n" // Length ... where _Dmain is the function label for function _Dmain, and _Dmain_end is a label after function _Dmain: ... int _Dmain (void) { asm ("_Dmain_label: .globl _Dmain_label"); return 0; } asm ("_Dmain_end: .globl _Dmain_end"); ... The problem is that the two labels are not in the same section, because _Dmain ends up in the .opd section, which "contains the official procedure descriptors. A pointer to a function shall reference a procedure descriptor in this section." Fix this by using function_range instead to get the length. Also, fix the address part to not use _Dmain, but instead use the function start as returned by function_range. Tested on x86_64-linux. Committed to trunk. Thanks, - Tom [gdb/testsuite] Fix gdb.dlang/watch-loc.exp on ppc64 gdb/testsuite/ChangeLog: 2020-09-16 Tom de Vries PR testsuite/26617 * gdb.dlang/watch-loc.c: Only add .debug_aranges if WITH_DEBUG_SECTIONS is defined. (xstr, str): New macro. (.debug_aranges): Use DMAIN_START_0/1/2 and DMAIN_LENGTH to get start and size of _Dmain. * gdb.dlang/watch-loc.exp: Pass DMAIN_START_0/1/2 and DMAIN_LENGTH using additional_flags. --- gdb/testsuite/gdb.dlang/watch-loc.c | 8 ++++++-- gdb/testsuite/gdb.dlang/watch-loc.exp | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/gdb/testsuite/gdb.dlang/watch-loc.c b/gdb/testsuite/gdb.dlang/watch-loc.c index de594f35ae..0a58f27d9f 100644 --- a/gdb/testsuite/gdb.dlang/watch-loc.c +++ b/gdb/testsuite/gdb.dlang/watch-loc.c @@ -36,6 +36,9 @@ 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.) */ @@ -52,10 +55,11 @@ asm ( " .byte 0 \n" // Size of Segment Descriptor " .2byte 0 \n" // Pad to 16 byte boundary " .2byte 0 \n" -" .4byte _Dmain \n" // Address -" .4byte _Dmain_end - _Dmain \n" // Length +" .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 d65f3c674f..dcd93789ce 100644 --- a/gdb/testsuite/gdb.dlang/watch-loc.exp +++ b/gdb/testsuite/gdb.dlang/watch-loc.exp @@ -27,6 +27,10 @@ if {![dwarf2_support]} { standard_testfile watch-loc.c watch-loc-dw.S +lassign [function_range _Dmain ${srcdir}/${subdir}/${srcfile}] \ + dmain_start dmain_length + + # Make some DWARF for the test. set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { @@ -62,8 +66,19 @@ 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] + if { [prepare_for_testing "failed to prepare" ${testfile} \ - [list $srcfile $asm_file] {nodebug}] } { + [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"] } { return -1 }