From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 266AE3885508 for ; Wed, 13 Jul 2022 17:08:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 266AE3885508 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 26DH7Clj030609; Wed, 13 Jul 2022 17:08:01 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com (PPS) with ESMTPS id 3ha25w80td-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Jul 2022 17:08:01 +0000 Received: from m0098420.ppops.net (m0098420.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 26DH80dn001673; Wed, 13 Jul 2022 17:08:00 GMT Received: from ppma01dal.us.ibm.com (83.d6.3fa9.ip4.static.sl-reverse.com [169.63.214.131]) by mx0b-001b2d01.pphosted.com (PPS) with ESMTPS id 3ha25w80sm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Jul 2022 17:08:00 +0000 Received: from pps.filterd (ppma01dal.us.ibm.com [127.0.0.1]) by ppma01dal.us.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 26DH6Lem019604; Wed, 13 Jul 2022 17:07:59 GMT Received: from b01cxnp23033.gho.pok.ibm.com (b01cxnp23033.gho.pok.ibm.com [9.57.198.28]) by ppma01dal.us.ibm.com with ESMTP id 3h71aa4tfa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Jul 2022 17:07:59 +0000 Received: from b01ledav001.gho.pok.ibm.com (b01ledav001.gho.pok.ibm.com [9.57.199.106]) by b01cxnp23033.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 26DH7xmo64225708 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 13 Jul 2022 17:07:59 GMT Received: from b01ledav001.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 175D328058; Wed, 13 Jul 2022 17:07:59 +0000 (GMT) Received: from b01ledav001.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6AC572805C; Wed, 13 Jul 2022 17:07:58 +0000 (GMT) Received: from li-e362e14c-2378-11b2-a85c-87d605f3c641.ibm.com (unknown [9.211.68.56]) by b01ledav001.gho.pok.ibm.com (Postfix) with ESMTP; Wed, 13 Jul 2022 17:07:58 +0000 (GMT) Message-ID: <8b51bf560fb6ac965f5990c319203d5fef027870.camel@us.ibm.com> Subject: [Ping] [PATCH V5] PowerPC: fix for gdb.base/eh_return.exp From: Carl Love To: will schmidt , Pedro Alves , Kevin Buettner , gdb-patches@sourceware.org Date: Wed, 13 Jul 2022 10:07:57 -0700 In-Reply-To: <794264a1beb2c2da19dc2c0d72ea9c9e5406abae.camel@us.ibm.com> References: <76bea9ad010a71ea5e2c7fd78f818bdb399810a6.camel@us.ibm.com> <20220506110826.5e16c8b6@f35-zws-1> <70a877cc-2f35-3924-6717-9d519c2730c5@palves.net> <099c8f8d8729a0051f83a034d62c18f03c789167.camel@vnet.ibm.com> <37d2a4b6a57b62662f0417f123bda6ba48066554.camel@vnet.ibm.com> <998d3f4859f16b73afd5103b682246643fef6d42.camel@us.ibm.com> <8ee42814763cc0e245c93f62c40cdaaad3ac65b2.camel@us.ibm.com> <6d82b4b8f30815f5dd98c001a8fe25632eb14a5a.camel@vnet.ibm.com> <356aac133a99cf293d7f4673412224d29b4a53be.camel@us.ibm.com> <794264a1beb2c2da19dc2c0d72ea9c9e5406abae.camel@us.ibm.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5 (3.28.5-18.el8) Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: M3dcIqrmGWcqxPuExsOKgg4yWbDK-jyE X-Proofpoint-ORIG-GUID: jW4lFiN-CZx6aXzpsOzOut8piltqZAzF X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-07-13_07,2022-07-13_03,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 suspectscore=0 spamscore=0 mlxlogscore=999 clxscore=1015 phishscore=0 mlxscore=0 malwarescore=0 bulkscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2206140000 definitions=main-2207130070 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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, 13 Jul 2022 17:08:08 -0000 Ping? On Wed, 2022-06-08 at 11:29 -0500, will schmidt wrote: > > > This looks good to me. Thanks for the multiple iterations and > updates. > I am not an approver but I recommend approval. :-) > > Thanks > -Wil On Wed, 2022-06-08 at 08:36 -0700, Carl Love wrote: > Will, Pedro, Kevin, GDB maintainers: > > Oops, accidentally hit send. Didn't get the patch attached yet. > > I have made the additional fixes to the comments and the setting of > the > clang options as mentioned by Will in version 4. I do not have an > environment where gdb can be built with clang. But I did check that > the clang options are properly passed to the compile command. > Unfortunately, extensive testing of gdb built with XLC and clang are > beyond the scope of this patch as I do not have access to such > systems. > > Per the comments from Kevin, the patch was updated to check for the > gcc > and xlc compilers on PowerPC. The patch was also tested and verified > on AIX which uses the gcc compiler to build gdb. The attempt to > build > gdb using the xlc compiler fails due to unrelated compiler > errors. The > xlc options to disable the Traceback Table was verified but that was > it. > > I have updated the patch per the comments from Will. The new version > of the patch uses a PowerPC specific gcc option to suppress the > generation of the Traceback Table information. The Traceback > information for this function is contained in the .long statements > following the last instruction in the function. The Traceback table > consists of a series of bit fields. The assembler tries to interpret > the Traceback Table as instructions. If the bits in the Traceback > Table happen to match a known instruction, the assembler will print a > bogus instruction, otherwise the assembler just prints the bits using > the .long statement. Unfortunately, the disassembler does not know > how > to locate the Traceback Table information at the end of a function. > > With this patch, the Traceback Table is disabled, so the last > instruction of the function is accurately found. Previously, the > break > point was set at the last .long statement which gdb will never > reach. > The test now passes as gdb successfully executes to the identified > last > instruction. > > Note, the use of the gcc mtraceback option is not valid on other > architectures. > > I have tested the patch on Linux Power 10 with gcc, AIX with the gcc > and Intel with gcc. > > Please let me know if this patch is acceptable. Thanks for the input > and help with the patch. > > Carl Love > > ------------------------------------------------------------------ > > PowerPC: fix for gdb.base/eh_return.exp > > Disable the Traceback Table generation on PowerPC for this test. The > Traceback Table consists of a series of bit fields to indicate things > like > the Traceback Table version, language, and specific information about > the > function. The Traceback Table is generated following the end of the > code > for every function by default. The Traceback Table is defined in the > PowerPC ELF ABI and is intended to support debuggers and exception > handlers. The Traceback Table is displayed in the disassembly of > functions > by default and is part of the function length. The table is > typically > interpreted by the disassembler as data represented by .long xxx > entries. > > Generation of the Traceback Table is disabled in this test using the > PowerPC specific gcc compiler option -mtraceback=no, the xlc option > additional_flags-qtable=none and the clang optons > -mllvm -xcoff-traceback-table=false. Disabling the Traceback Table > generation in this test results in the gdb_test_multiple statement > correctly locating the address of the bclr instruction before the > statement > "End of assembler dump." in the disassembly output. > --- > gdb/testsuite/gdb.base/eh_return.exp | 36 > +++++++++++++++++++++++++++- > 1 file changed, 35 insertions(+), 1 deletion(-) > > diff --git a/gdb/testsuite/gdb.base/eh_return.exp > b/gdb/testsuite/gdb.base/eh_return.exp > index df55dbc72da..6e4b9bd0bba 100644 > --- a/gdb/testsuite/gdb.base/eh_return.exp > +++ b/gdb/testsuite/gdb.base/eh_return.exp > @@ -18,8 +18,42 @@ > > standard_testfile > > +# Set compiler flags. > +if {[istarget "powerpc*"]} then { > + # PowerPC generates a Traceback Table, as defined in the PPC64 > ABI, > + # following each function by default. The Traceback Table > information is > + # typically interpreted by the disassembler as data represented > with > + # .long xxxx following the last instruction in the > function. For example: > + # > + # Dump of assembler code for function eh2: > + # 0x00000000100009e0 <+0>: lis r2,4098 > + # ... > + # 0x0000000010000b04 <+292>: add r1,r1,r10 > + # 0x0000000010000b08 <+296>: blr > + # 0x0000000010000b0c <+300>: .long 0x0 > + # 0x0000000010000b10 <+304>: .long 0x1000000 > + # 0x0000000010000b14 <+308>: .long 0x1000180 > + # End of assembler dump. > + # > + # Disable the Traceback Table generation, using the PowerPC > specific > + # compiler option, so the test gdb_test_multiple "disassemble > eh2" will > + # locate the address of the blr instruction not the last .long > statement. > + if { [test_compiler_info "gcc-*"] } { > + set compile_flags {debug nopie additional_flags=-mtraceback=no} > + } elseif { [test_compiler_info "xlc-*"] } { > + set compile_flags {debug nopie additional_flags=-qtbtable=none} > + } elseif { [test_compiler_info "clang-*"] } { > + set compile_flags [list debug nopie additional_flags=-mllvm \ > + additional_flags=-xcoff-traceback- > table=false] > + } else { > + set compile_flags {debug nopie } > + } > +} else { > + set compile_flags {debug nopie} > +} > + > if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ > - {debug nopie}]} { > + $compile_flags]} { > return -1 > } >