From patchwork Mon Jun 17 22:26:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Bergner X-Patchwork-Id: 1948917 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=PH0AnxPX; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4W37422J3tz20Wb for ; Tue, 18 Jun 2024 10:32:02 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6762B388212A for ; Tue, 18 Jun 2024 00:32:00 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 5CE9A388210E for ; Tue, 18 Jun 2024 00:29:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5CE9A388210E 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 5CE9A388210E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718670561; cv=none; b=hp8z7OHpYbUnsvO2I3KZtYTn7eK0RE6XIGKClATGSQ07I4RiROatOuiKmIpSrDJqh4GToOYztTXIdWJUqMHHzYBLpy3VU/0C7qJ86uv7I6tA84mQCPi3mQNc+z8oMRprslP2jY2SmylAulj9fpljW+1QCPtyf3qBMdSc2RIMUgs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718670561; c=relaxed/simple; bh=gneFkRAJD4A/yeiKOVdwpgycOHSi3L3e8R4URFACjf4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=HSsnAhWrMrcZ6rg7xBrQRKbMTirpC0NVgLHX96zwWI7hMKz1DKL3wHTRWFPchrz8UdgWDY2h14ljGnOwBHR3rOILcG2Qpgf7ujrTow1ttuLZ9vCuOaglUt/g1Dci12LyJ3GGAeTNV6BpdJTWPIRS16HRp6RFFyWRrH0IQouB0SE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 45HLocLN013713; Mon, 17 Jun 2024 22:26:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h= message-id:date:mime-version:to:cc:from:subject:content-type :content-transfer-encoding; s=pp1; bh=JOAUPYJtH+EP1xlL22MYApJ9am 4vazampUzEeH8qS24=; b=PH0AnxPXAn9fVFTJ6JQr1cY4dDhdTMayDlcbR3IcBs u4AH0+UR4RkzBS3em4QqA+V8RiiylUU5tU2VF/41JWFqzun5jzbUbXHSqkV6s64b +0YsPr4kRTIlPalX4+s23qkT3fQR5LKoaSk5CgJAoPtH6aCRxx8Zro2oAxS2+Veu sBT8SXuRtPJstqGpjvj8TWB4vKm3PRji8jjwH8Nzie4PM8IC6F60/0NWyXRSeugV t6G/LuFL8fKCcT3WWO8MSJp6OIckddVjO9URDXJuHALmF70061+Z5y98D50vdyPc LAd8ND0Ap+Y7l/By6nc09Gai96wSyG7CNlGzuDe7AEeA== 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 3ytw3br395-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 17 Jun 2024 22:26:45 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 45HLOKjS009411; Mon, 17 Jun 2024 22:26:44 GMT Received: from smtprelay06.wdc07v.mail.ibm.com ([172.16.1.73]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 3ysqgmdh7b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 17 Jun 2024 22:26:44 +0000 Received: from smtpav04.dal12v.mail.ibm.com (smtpav04.dal12v.mail.ibm.com [10.241.53.103]) by smtprelay06.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 45HMQeLU28377642 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 17 Jun 2024 22:26:43 GMT Received: from smtpav04.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D370C5805E; Mon, 17 Jun 2024 22:26:40 +0000 (GMT) Received: from smtpav04.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8F23F5805A; Mon, 17 Jun 2024 22:26:40 +0000 (GMT) Received: from [9.61.45.213] (unknown [9.61.45.213]) by smtpav04.dal12v.mail.ibm.com (Postfix) with ESMTP; Mon, 17 Jun 2024 22:26:40 +0000 (GMT) Message-ID: <2b49ba81-054e-4918-8721-f97ba33874b0@linux.ibm.com> Date: Mon, 17 Jun 2024 17:26:39 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Segher Boessenkool , "Kewen.Lin" Cc: GCC Patches From: Peter Bergner Subject: [PATCH] rs6000: ROP - Do not disable shrink-wrapping for leaf functions [PR114759] X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: StD1shQ4rZ7I43vbW7NUVUYYGh0BRtt6 X-Proofpoint-GUID: StD1shQ4rZ7I43vbW7NUVUYYGh0BRtt6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-06-17_14,2024-06-17_01,2024-05-17_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 adultscore=0 spamscore=0 priorityscore=1501 malwarescore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 mlxscore=0 mlxlogscore=972 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2405170001 definitions=main-2406170173 X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, 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: 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+incoming=patchwork.ozlabs.org@gcc.gnu.org While auditing our ROP code generation for some test cases I wrote, I noticed a few issues which I'm tracking in PR114759. The first issue I noticed is we disable shrink-wrapping when using -mrop-protect, even in the cases where we never emit the ROP instructions because they're not needed. The problem is we disable shrink-wrapping too early, before we know whether we will need to emit the ROP instructions or not. The fix is to delay disabling shrink wrapping until we've decided whether we will or won't be emitting the ROP instructions. This patch passed bootstrap and regtesting on powerpc64le-linux with no regressions, with the unpatched build FAILing the new test case and the patched build PASSing the new test case. Ok for trunk? Peter rs6000: ROP - Do not disable shrink-wrapping for leaf functions [PR114759] Only disable shrink-wrapping when using -mrop-protect when we know we will be emitting the ROP instructions (ie, non-leaf functions). 2024-06-17 Peter Bergner gcc/ PR target/114759 * config/rs6000/rs6000.cc (rs6000_override_options_after_change): Move the disabling of shrink-wrapping from here.... * config/rs6000/rs6000-logue.cc (rs6000_stack_info): ...to here. gcc/testsuite/ PR target/114759 * gcc.target/powerpc/pr114759-1.c: New test. --- gcc/config/rs6000/rs6000-logue.cc | 6 +++++- gcc/config/rs6000/rs6000.cc | 4 ---- gcc/testsuite/gcc.target/powerpc/pr114759-1.c | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr114759-1.c diff --git a/gcc/config/rs6000/rs6000-logue.cc b/gcc/config/rs6000/rs6000-logue.cc index 193e2122c0f..659da0bd53f 100644 --- a/gcc/config/rs6000/rs6000-logue.cc +++ b/gcc/config/rs6000/rs6000-logue.cc @@ -720,7 +720,11 @@ rs6000_stack_info (void) && info->calls_p && DEFAULT_ABI == ABI_ELFv2 && rs6000_rop_protect) - info->rop_hash_size = 8; + { + /* If we are inserting ROP-protect instructions, disable shrink wrap. */ + flag_shrink_wrap = 0; + info->rop_hash_size = 8; + } else if (rs6000_rop_protect && DEFAULT_ABI != ABI_ELFv2) { /* We can't check this in rs6000_option_override_internal since diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index e4dc629ddcc..fd6e013c346 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -3427,10 +3427,6 @@ rs6000_override_options_after_change (void) } else if (!OPTION_SET_P (flag_cunroll_grow_size)) flag_cunroll_grow_size = flag_peel_loops || optimize >= 3; - - /* If we are inserting ROP-protect instructions, disable shrink wrap. */ - if (rs6000_rop_protect) - flag_shrink_wrap = 0; } #ifdef TARGET_USES_LINUX64_OPT diff --git a/gcc/testsuite/gcc.target/powerpc/pr114759-1.c b/gcc/testsuite/gcc.target/powerpc/pr114759-1.c new file mode 100644 index 00000000000..b4ba366402f --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr114759-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect -fdump-rtl-pro_and_epilogue" } */ +/* { dg-require-effective-target rop_ok } */ + +/* Verify we still attempt shrink-wrapping when using -mrop-protect + and there are no function calls. */ + +long +foo (long arg) +{ + if (arg) + asm ("" ::: "r20"); + return 0; +} + +/* { dg-final { scan-rtl-dump-times "Performing shrink-wrapping" 1 "pro_and_epilogue" } } */