From patchwork Mon Feb 3 19:56:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Leoshkevich X-Patchwork-Id: 105948 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 728143858430 for ; Mon, 3 Feb 2025 19:57:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 728143858430 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=lEMV7xOW X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id C76883858C35; Mon, 3 Feb 2025 19:56:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C76883858C35 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C76883858C35 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1738612600; cv=none; b=Z69E2Y5BOfbEBWx8bYmFJlaJQq3acx5LVzkNX2ntOl9Cjotq1bBe9zaSZwFAF+VsNbJFIEaSmxN+jYhrThEGbhC0XbHajeyESYnOHVYdBYpmgpOqtMcBUyNFCmFeGxCFx53r4kVGThlfKbjNuecllX5/V9iR1RXOAO1PjCKwHZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1738612600; c=relaxed/simple; bh=oyPENO/b8ETodQ1+DPjDs4dmQ2CfaMaUUEAqJAkKnOE=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=xxvn18LPXlk/7diu5rOgUvuzZ2YPJUSPZ0tagl0ft3GHJKOBucLybzWKFy4dJigvdGHdgqci8bm9ajucsUXyz351ag6yE3NRlQJVFGLtBsLMDMDCh8WOmtIYlvWGJtJ4I9iEu0ECa8DfwxRNT02fvGJRhub3J9gEDZxKAZ6dfww= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C76883858C35 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 513EnaVX014033; Mon, 3 Feb 2025 19:56:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=pp1; bh=GpOfswenkNOpDUsqvEv8mwg3RaMOCAQmDMw4rSmQ2 Q8=; b=lEMV7xOWEhAbSEbYZ1KtQKFuj8cP+Ixp5lX0VUMUuT9PbHhk6S5Lz0vXW quEtyIyCYjPVm+Nb3WspLdSyycjWJz5Dt5QCX5UQlvZZmmDStYiZ/4EhaaVmEOlZ FReUxjgg1SxsZAUuLRBkhPywAnajL6MWes+rLZ2VaOMkSJUH2WrsJRAJdGKGutx7 4dYAWgc9dcMFhP5OSyBCG4s1Zd7Myqv7XyLm0eR2FhrSvcajsCYd0d5mdUvFCsMH lp5qGV0OF042e/Lv19ZYk275Yogy9FtpQ5dx0rixiWzPzs7Knc7+pczJeKqYBmV9 X2H+dTnzyfZEkLo1GT4dlUd8euYGw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44jqm7c3uv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 03 Feb 2025 19:56:38 +0000 (GMT) Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 513Jrhwd013087; Mon, 3 Feb 2025 19:56:38 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44jqm7c3us-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 03 Feb 2025 19:56:37 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 513GiEBx005258; Mon, 3 Feb 2025 19:56:37 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 44j05jqtdc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 03 Feb 2025 19:56:37 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 513JuXJG35520996 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 3 Feb 2025 19:56:33 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7BACC20098; Mon, 3 Feb 2025 19:56:33 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1162F20097; Mon, 3 Feb 2025 19:56:33 +0000 (GMT) Received: from heavy.ibm.com (unknown [9.171.26.103]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 3 Feb 2025 19:56:32 +0000 (GMT) From: Ilya Leoshkevich To: Andreas Krebbel , Stefan Schulze Frielinghaus Cc: gcc-patches@gcc.gnu.org, Juergen Christ , Rui Ueyama , Ilya Leoshkevich Subject: [PATCH] IBM zSystems: Do not use @PLT with larl Date: Mon, 3 Feb 2025 20:56:01 +0100 Message-ID: <20250203195631.6059-1-iii@linux.ibm.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: RY5wEsXjbOoGaKWDt5ONGXoo6rBMEMGS X-Proofpoint-ORIG-GUID: Z_r0ujXHvt8N5YTSB2ttJ0eSnbqqJ3kN X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-03_08,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 lowpriorityscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 suspectscore=0 priorityscore=1501 phishscore=0 impostorscore=0 spamscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2501170000 definitions=main-2502030142 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org Bootstrapped and regtested on s390x-redhat-linux. Ok for master? Commit 0990d93dd8a4 ("IBM Z: Use @PLT symbols for local functions in 64-bit mode") made GCC call both static and non-static functions and load both static and non-static function addresses with the @PLT suffix. This made it difficult for linkers to distinguish calling and address taking instructions [1]. It is currently assumed that the R_390_PLT32DBL relocation, corresponding to the @PLT suffix, is used only for calling, and the R_390_PC32DBL relocation, corresponding to the empty suffix, is used only for address taking. Linkers needs to make this distinction in order to decide whether to ask ld.so to use canonical PLT entries. Normally GOT entries in shared objects contain addresses of the respective functions, with one notable exception: when a no-pie executable calls the respective function and also takes its address. Such executables assume that all addresses are known in advance, so they use addresses of the respective PLT entries. For consistency reasons, all respective GOT entries in the process must also use them. When a linker sees that a no-pie executable both calls a function and also takes its address, it creates a PLT entry and asks ld.so to consider it canonical by setting the respective undefined symbol's address, which is normally 0, to the address of this PLT entry. Improve the situation by not using @PLT with larl. Now that @PLT is not used with larl, also drop the 31-bit handling, which was required because 31-bit PLT entries require %r12 to point to the respective object's GOT, and this requirement is not satisfied when calling them by pointer from another object. Also drop the weak symbol handling, which was required because it is not possible to load an undefined weak symbol address (0) using larl. [1] https://sourceware.org/bugzilla/show_bug.cgi?id=29655 gcc/ChangeLog: * config/s390/s390.cc (print_operand): Remove the no longer necessary 31-bit and weak symbol handling. * config/s390/s390.md (*movdi_64): Do not use @PLT with larl. (*movsi_larl): Likewise. (main_base_64): Likewise. (reload_base_64): Likewise. gcc/testsuite/ChangeLog: * gcc.target/s390/call-z10-pic-nodatarel.c: Adjust expectations. * gcc.target/s390/call-z10-pic.c: Likewise. * gcc.target/s390/call-z10.c: Likewise. * gcc.target/s390/call-z9-pic-nodatarel.c: Likewise. * gcc.target/s390/call-z9-pic.c: Likewise. * gcc.target/s390/call-z9.c: Likewise. --- gcc/config/s390/s390.cc | 16 +++------------- gcc/config/s390/s390.md | 8 ++++---- .../gcc.target/s390/call-z10-pic-nodatarel.c | 6 ++---- gcc/testsuite/gcc.target/s390/call-z10-pic.c | 6 ++---- gcc/testsuite/gcc.target/s390/call-z10.c | 14 +++++--------- .../gcc.target/s390/call-z9-pic-nodatarel.c | 6 ++---- gcc/testsuite/gcc.target/s390/call-z9-pic.c | 6 ++---- gcc/testsuite/gcc.target/s390/call-z9.c | 14 +++++--------- 8 files changed, 25 insertions(+), 51 deletions(-) diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index 86a5f059b85..1d96df49fea 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -8585,7 +8585,7 @@ print_operand_address (FILE *file, rtx addr) 'E': print opcode suffix for branch on index instruction. 'G': print the size of the operand in bytes. 'J': print tls_load/tls_gdcall/tls_ldcall suffix - 'K': print @PLT suffix for call targets and load address values. + 'K': print @PLT suffix for branch targets; do not use with larl. 'M': print the second word of a TImode operand. 'N': print the second word of a DImode operand. 'O': print only the displacement of a memory reference or address. @@ -8854,19 +8854,9 @@ print_operand (FILE *file, rtx x, int code) call even static functions via PLT. ld will optimize @PLT away for normal code, and keep it for patches. - Do not indiscriminately add @PLT in 31-bit mode due to the %r12 - restriction, use UNSPEC_PLT31 instead. - @PLT only makes sense for functions, data is taken care of by - -mno-pic-data-is-text-relative. - - Adding @PLT interferes with handling of weak symbols in non-PIC code, - since their addresses are loaded with larl, which then always produces - a non-NULL result, so skip them here as well. */ - if (TARGET_64BIT - && GET_CODE (x) == SYMBOL_REF - && SYMBOL_REF_FUNCTION_P (x) - && !(SYMBOL_REF_WEAK (x) && !flag_pic)) + -mno-pic-data-is-text-relative. */ + if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_FUNCTION_P (x)) fprintf (file, "@PLT"); return; } diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index c164ea72c78..9d495803387 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -2001,7 +2001,7 @@ vlgvg\t%0,%v1,0 vleg\t%v0,%1,0 vsteg\t%v1,%0,0 - larl\t%0,%1%K1" + larl\t%0,%1" [(set_attr "op_type" "RI,RI,RI,RI,RI,RIL,RIL,RIL,RRE,RRE,RRE,RXY,RIL,RRE,RXY, RXY,RR,RX,RXY,RX,RXY,RIL,SIL,*,*,RS,RS,VRI,VRR,VRS,VRS, VRX,VRX,RIL") @@ -2390,7 +2390,7 @@ (match_operand:SI 1 "larl_operand" "X"))] "!TARGET_64BIT && !FP_REG_P (operands[0])" - "larl\t%0,%1%K1" + "larl\t%0,%1" [(set_attr "op_type" "RIL") (set_attr "type" "larl") (set_attr "z10prop" "z10_fwd_A1") @@ -11735,7 +11735,7 @@ [(set (match_operand 0 "register_operand" "=a") (unspec [(label_ref (match_operand 1 "" ""))] UNSPEC_MAIN_BASE))] "GET_MODE (operands[0]) == Pmode" - "larl\t%0,%1%K1" + "larl\t%0,%1" [(set_attr "op_type" "RIL") (set_attr "type" "larl") (set_attr "z10prop" "z10_fwd_A1") @@ -11755,7 +11755,7 @@ [(set (match_operand 0 "register_operand" "=a") (unspec [(label_ref (match_operand 1 "" ""))] UNSPEC_RELOAD_BASE))] "GET_MODE (operands[0]) == Pmode" - "larl\t%0,%1%K1" + "larl\t%0,%1" [(set_attr "op_type" "RIL") (set_attr "type" "larl") (set_attr "z10prop" "z10_fwd_A1")]) diff --git a/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c b/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c index 49984614bc6..6df0c75584f 100644 --- a/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c +++ b/gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c @@ -7,10 +7,8 @@ /* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} { target lp64 } } } */ /* { dg-final { scan-assembler {lrl\t%r2,foo@GOTENT\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */ +/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */ /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */ /* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} { target lp64 } } } */ diff --git a/gcc/testsuite/gcc.target/s390/call-z10-pic.c b/gcc/testsuite/gcc.target/s390/call-z10-pic.c index 210c56cc4ca..30145d5b760 100644 --- a/gcc/testsuite/gcc.target/s390/call-z10-pic.c +++ b/gcc/testsuite/gcc.target/s390/call-z10-pic.c @@ -7,10 +7,8 @@ /* { dg-final { scan-assembler {lgrl\t%r2,foo@GOTENT\n} { target lp64 } } } */ /* { dg-final { scan-assembler {lrl\t%r2,foo@GOTENT\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */ +/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */ /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */ /* { dg-final { scan-assembler {lgrl\t%r2,fooweak@GOTENT\n} { target lp64 } } } */ diff --git a/gcc/testsuite/gcc.target/s390/call-z10.c b/gcc/testsuite/gcc.target/s390/call-z10.c index 2d7dc735df4..d4eab4ff89f 100644 --- a/gcc/testsuite/gcc.target/s390/call-z10.c +++ b/gcc/testsuite/gcc.target/s390/call-z10.c @@ -3,17 +3,13 @@ #include "call.h" -/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foo\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foo@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foo\n} { target { ! lp64 } } } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */ +/* { dg-final { scan-assembler {larl\t%r2,foo\n} } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */ +/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak\n} } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */ /* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */ /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */ diff --git a/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c b/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c index b1ae318d3e9..fe515bf1903 100644 --- a/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c +++ b/gcc/testsuite/gcc.target/s390/call-z9-pic-nodatarel.c @@ -6,10 +6,8 @@ /* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */ /* { dg-final { scan-assembler {larl\t%r\d+,foo@GOTENT\n} } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */ +/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */ /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */ /* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */ diff --git a/gcc/testsuite/gcc.target/s390/call-z9-pic.c b/gcc/testsuite/gcc.target/s390/call-z9-pic.c index a89e78d8df8..43e1c2f7cb3 100644 --- a/gcc/testsuite/gcc.target/s390/call-z9-pic.c +++ b/gcc/testsuite/gcc.target/s390/call-z9-pic.c @@ -6,10 +6,8 @@ /* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */ /* { dg-final { scan-assembler {larl\t%r\d+,foo@GOTENT\n} } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */ +/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */ /* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */ /* { dg-final { scan-assembler {larl\t%r\d+,fooweak@GOTENT\n} } } */ diff --git a/gcc/testsuite/gcc.target/s390/call-z9.c b/gcc/testsuite/gcc.target/s390/call-z9.c index 21d035aecb6..b755f33498a 100644 --- a/gcc/testsuite/gcc.target/s390/call-z9.c +++ b/gcc/testsuite/gcc.target/s390/call-z9.c @@ -3,17 +3,13 @@ #include "call.h" -/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foo\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foo@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foo\n} { target { ! lp64 } } } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,foo@PLT\n} } } */ +/* { dg-final { scan-assembler {larl\t%r2,foo\n} } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic\n} { target { ! lp64 } } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic@PLT\n} { target lp64 } } } */ -/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} { target { ! lp64 } } } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,foostatic@PLT\n} } } */ +/* { dg-final { scan-assembler {larl\t%r2,foostatic\n} } } */ -/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak\n} } } */ +/* { dg-final { scan-assembler {brasl\t%r\d+,fooweak@PLT\n} } } */ /* { dg-final { scan-assembler {larl\t%r2,fooweak\n} } } */ /* { dg-final { scan-assembler {foos:\n\t.quad\tfoo\n\t.quad\tfoostatic\n\t.quad\tfooweak\n} { target lp64 } } } */