From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 53533 invoked by alias); 14 Mar 2018 17:40:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 53518 invoked by uid 89); 14 Mar 2018 17:40:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=CAUTION X-HELO: EUR03-DB5-obe.outbound.protection.outlook.com Received: from mail-eopbgr40049.outbound.protection.outlook.com (HELO EUR03-DB5-obe.outbound.protection.outlook.com) (40.107.4.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 14 Mar 2018 17:40:55 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Sudi.Das@arm.com; Received: from [10.2.206.246] (217.140.96.140) by DB3PR08MB0220.eurprd08.prod.outlook.com (2a01:111:e400:504f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.567.12; Wed, 14 Mar 2018 17:40:51 +0000 To: "gcc-patches@gcc.gnu.org" Cc: nd , James Greenhalgh , Marcus Shawcroft , Richard Earnshaw From: Sudakshina Das Subject: [PATCH][AARCH64] PR target/84521 Fix frame pointer corruption with -fomit-frame-pointer with __builtin_setjmp Message-ID: <4ee92fe8-3070-0129-59ad-40cbe0207822@arm.com> Date: Wed, 14 Mar 2018 18:07:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------ECF2D8368D8C7CC67B0970B4" X-ClientProxiedBy: DB6PR07CA0073.eurprd07.prod.outlook.com (2603:10a6:6:2b::11) To DB3PR08MB0220.eurprd08.prod.outlook.com (2a01:111:e400:504f::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 8847ce8a-b170-4b29-5ab2-08d589d2bab7 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(2017052603328)(7153060)(49563074)(7193020);SRVR:DB3PR08MB0220; X-Microsoft-Exchange-Diagnostics: 1;DB3PR08MB0220;3:b4ze77PNUFLt2Mo8e3WR83qAzkGxrwmER5ep09DvS/hUFrMZ7w1oyyqf1B8XBtgG8pEZO4yuwwBcqsF83C3QRtrBg49dvZ1Mtk6EDQQMtaygWH5YYwZd88CuzgK3JLnnhOeoniqzFuQeTo8HhxuqmRDMyYQsS7vFBpzUW43mDEIDsw6I5ibqSOrpNvUsQQOJIW/hPXBeQebpPDUNSiF1IPIyc/mYA5T7sx8yD72grUVKUT4Ibjcuoz+d0yXQ+lBu;25:z17BUnhiKOqxQzWSfQyaAslMmGwMOBwxTsupF/4WVMlSW3SbpC94ywFf2k0Uc/vy7duEiuGFxWRhiY/HxjlEKaG05LaFltuYSsTPA7+IkYm4O5meW1XOAB/As3yd7mGp+9VNMUpceORhfyRs2CCXOGMSduZVKYwIO/q0Q4l4/Fu/Rj2yhS0EI0ySluC6so3DPI4ReKtrr2mvoRZukASGXxc+QKg4bcnYrKI3h48sAJ+YLvOb3HGpsYEIqcu2Daer+TEAP5a8IKWMPEvJkqZvDl2A9vsMk6K3k3cb6NT8MQmFqsNBLHm8vYQtLNY/rAzZdZqnN/LhCKre3rjyUjILGg==;31:2Dye4cgnSf51P0YzwcnygQ1vag0j62AseMIN91uFCXzsgXgtg/MTAJUTAFMMvMjbhw09Vcxa76sJN3XvCwjUaz3P6bTweSKQlJg7sSV6UAn2NGialdLPkCOaBwIbeAKIvLDesosw20VR2gil6e0XJ6STsfJhoiWfb0Hw/qf772rpeL+j+Qojnt0psdbOxDIc0Eo2zdGbI+bhZ2o66EuRGEXIQmxoe8Q3ZVFmGef+nHA= X-MS-TrafficTypeDiagnostic: DB3PR08MB0220: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1;DB3PR08MB0220;20:RSLCtO/c1vE3rUlsan8/88HS5M4z7xcUv0Jzzxd4jUbcs0PfIYgJZ6ox0oJseKJyx6B4sRoZvq5mUk05oL2vjpm4yjs9OuhZkF2xtE5rD83dcAAj850sgKSuacaTYfriVBtWv8w6NcB9AnuOXbJOaUpIbUF2fBnKT9HVe0YBSYk=;4:St6dsz22KtCcNdr09JTUHBASKLXo1sSVk9ZwRky2t8RnAPFHU0ln2DVj6eOgPULdD33W//f+41pyJC84XMGD6k4ISabzgRL/dIZ9TSg8icyzilcrS1BlXEC6SHIW/x+6wawDcKUz/YFRXxWldTScEkxYU1Ko1cJmgBK1BjFZFpvotZvkr/BkWD8URvP5K2JsGnQXP+zNEpkZAoVF8L2Z0dsyyAmWS+sD1rFfcKcqjANxGY8In9S5DwxpcbZrIXJdCP2nXJR0XavhvbmTtNrTAj2b32Rm022aKnrgiYAKY54l2aSKXVvR4XSlQhZUZDgz X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(8211001083)(102415395)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501244)(52105095)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041310)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011);SRVR:DB3PR08MB0220;BCL:0;PCL:0;RULEID:;SRVR:DB3PR08MB0220; X-Forefront-PRVS: 0611A21987 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6049001)(39380400002)(396003)(366004)(346002)(39860400002)(376002)(199004)(189003)(54534003)(377424004)(8936002)(105586002)(72206003)(106356001)(6116002)(31686004)(4610100001)(8676002)(5000100001)(81156014)(6916009)(31696002)(81166006)(65826007)(25786009)(21490400003)(97736004)(2501003)(64126003)(6486002)(478600001)(4326008)(2351001)(3846002)(305945005)(16576012)(5890100001)(7736002)(5640700003)(16586007)(53936002)(270700001)(2476003)(1857600001)(37036004)(316002)(84326002)(386003)(77096007)(66066001)(58126008)(65806001)(65956001)(54906003)(68736007)(5660300001)(26005)(36756003)(2906002)(86362001)(52116002)(59450400001)(16526019)(33964004)(568964002);DIR:OUT;SFP:1101;SCL:1;SRVR:DB3PR08MB0220;H:[10.2.206.246];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB3PR08MB0220;23:ADJ3kKj50dzWHnGv8kNHcVpqhMsV+04O+a2U754oX?= =?us-ascii?Q?ESVLpvdXSfSNWFQABr5r3wI1wK9TJoX7tiu+GkYsY6OHrYM/jBxol+BMEn6d?= =?us-ascii?Q?oARky68Ly1pp7wY6Fuv/KsIpxZSE6cR/OKVIUcdiLZV/kVCi8jd2DfWO3B0Z?= =?us-ascii?Q?WiUBqLkRGsqtQEPbFK4Tinq3cGNnGswdzYxTK2+5VkCUQdv7pmnCf3efs7US?= =?us-ascii?Q?DieJE/Eky7/Fe2hGcpkyRwwGM5AHlAvuoAqda0cT4xaF4iY630x6CUrZpUNh?= =?us-ascii?Q?VXMYk11mZ7iPuh4BRx2qq0ctEl2WGW82eAwhwKvfDdRCl5O1V0GVDmoP6UAH?= =?us-ascii?Q?GwKSMF4BKa9rRIDHuSHzowkdjB5iFRoVW1jqz3e7mZnR4Z1DHvzKzcrpiemQ?= =?us-ascii?Q?U7x7LYdvrKgDBDGfP54Yc6EuuwWIhkU4hp1DZcJvkENZLwK7+C7w/ob6Yf6t?= =?us-ascii?Q?gJldsW0DVWRJWgM4O6f+yf5IJTZrC6w4QwiDtJfF+5SbtSlU/71y0e4/raJQ?= =?us-ascii?Q?p65IqQlHjUY4Fgz1zdwtut2OaLW5mL59VbLRC8Cpt6I33IWe9ywG6yT6bdSa?= =?us-ascii?Q?G31PzUTCD8U92w4xE4b3gtLn9oKQl2KgSntwk3sNhS8V4wu0gSbi4amJoRx3?= =?us-ascii?Q?4UP8Q1vvOeFVPg3dNAq6v5OOGvn4ambmDKSjlvpL60JEE05NJiR76tTOBll3?= =?us-ascii?Q?qtR2SmH1+/Cy670cQcMrFiFnyCG1Lzqik4n2ePctWc9qyVBH8VlTX9X54wOg?= =?us-ascii?Q?W+eVtH4guaE20uKaPLqNC2fbnig+CDTiq6vKCbL7kw74UhiwmJ3+dKXO0sDx?= =?us-ascii?Q?T47q3i1XfnZxClkSGBHVP24ocaq0EsAEKH3XzEFCIkF7i7uVMGyEt+co+/sb?= =?us-ascii?Q?4LH7etPR0SHy84BHXlcSoIYdIrP6skn7vVtYreWuOQGCiUe7sRhfXbQXo+O0?= =?us-ascii?Q?nQpz8wp5ruzTpxxnoNMpWoZD/YVcs1tx2Pq4OsNt8BqqTYsdn8pyxXQzVq/P?= =?us-ascii?Q?CEhwK6qGkwr3jYfyjVPXwMMlvQCFhsWRKhN6tgCpNmSO6lXC4A1dhufPWiNK?= =?us-ascii?Q?9MU055EEfx1trV/g+YJVcGS8+yv3Pfl0Q9dKrgAu2iCBvASqaYETrVwdgxZB?= =?us-ascii?Q?xXHnjuCE9o4LVo8c2k9kj49s5MxL86THk2W69bsn1jdSp2VyPrfc0fQoiUrm?= =?us-ascii?Q?BMi4v/1kDbuNIQizQKxH9GLbkuK8/TVVGA2AXbhgWA2/q+jiH+eAMVEb50cM?= =?us-ascii?Q?iQkD2CFhF0gb6U7JvA4VoxqgG/Kx8dVHF7Xs+c9ZBI5xmuJe28GLwpoP84zn?= =?us-ascii?Q?ukeo+nUPY7vWYn9IA82MWx+ZLGv03j1DIZFPQx4Y2UJAsImGtYjRsbMJcPeA?= =?us-ascii?Q?oy+r6bHIRYxgjemUOo3Q3fqkGN8aU3d23OgdVNXIBNTwlBqPc6bILtdKNJzj?= =?us-ascii?Q?fdxeeTV/q8WwxbNMXi2uPTfe9ouMqgbTImFxfdgarmCOVIo5JgGTXPq1cQww?= =?us-ascii?Q?AdDKvp583K6Sr9IA5jHAgeCKsK5ujuH0/zK23wgiLZuBtHu8bPjbiRt?= X-Microsoft-Antispam-Message-Info: jmVYSrpN7QwQ+V4xHS5qa2GQJKHzxKMubh8SLgSO8q3Oe3V74NAaJzmahfI52lVKYJHs13TCHEbWXDD4oCHDsVyvEZ3S8zaxQvWtmQSE6Zum3nNugvkUf+VGjOKcme2VSdGJcLNWQ7DHZabBjHTo2zzCK7gs/3Tn3HXraU2yKtk1qhWyuLRwMb8cUtLADAsE X-Microsoft-Exchange-Diagnostics: 1;DB3PR08MB0220;6:X12z7UG7h+u404UtBAFmhxnPIpKqZBH1unybmo8AU8y2YYxd77MyuZxAi7KZmLCU54drEgFeBqda+xPxP5gUd/xnBl8Ib/5EBRdx9DaLxBsXPLC/VKmNY8LEb85dMKwJR0tXmW/qSlF2C38Tw//HEpAL4eaYO85oGuSZeuR9pR3M9FBzPo55db8yxFp7DX1SsyJp30ye8FZLzCnnBPnAF95RQv+pcwVi8sYnc3cWN+qzMpjAzVM3v0533Jo0J2xKdt9y+0SptljY/T5Z0m65mEC5pOHxlMQRsjU9yP8SRM/MrFAsBMMItvxTl07djsVpE09sJIa21QYvSXBooTJCj7LNa7LBM9dCWFBfKVd6ofs=;5:rJ4/+jxI9j3dWynqjKT6mLR5bc0FG5/UQPstrTS4i2Es73/1NWsY4FQPhHtgvX9sLTVZIhgQL1/k9OVfMOMgILv9b0cVtV1TETf64GbNTUuajdO8L5WV9L2aqbTaDzHqRS2NH26vIvLKtGn9LEjslVMRHKpfpeSsJd2a8soITfo=;24:Nl0lTn6nqkuPFNDOe8calv4USUJ0xBNBdn+2LKFQdaR0jeZAqEAKxP31D24lT1pfOSENOFnfjKdPJzkRcEDVo/8KFH/r3IPTBFWokDy8D6o=;7:jQVaXQsvESBnBN7VvAh+UBFiZXLvohfTuvBMQa4rpktS1twxUVr6PfVoTEd8lHtgNG5/yvOOt4r1+Qaj/w49on1qtl6VZusUYQT4JPhFaGHRX9VW7GV4plnsgCo3vK1I2i/oPeIXe2f4ckoPEHShrdJx5/43qHCuYoThR1lmW/zaoLdLBzwcpm+blCvG9x5IA1F2TYbS5ojJWp4KiqWR3aUVuT7mNntMVujkXHXUjqOk6oKj53e7m1RDvELm2gHo SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Mar 2018 17:40:51.0102 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8847ce8a-b170-4b29-5ab2-08d589d2bab7 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR08MB0220 X-IsSubscribed: yes X-SW-Source: 2018-03/txt/msg00669.txt.bz2 This is a multi-part message in MIME format. --------------ECF2D8368D8C7CC67B0970B4 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 931 Hi This patch is another partial fix for PR 84521. This is adding a definition to one of the target hooks used in the SJLJ implemetation so that AArch64 defines the hard_frame_pointer_rtx as the TARGET_BUILTIN_SETJMP_FRAME_VALUE. As pointed out by Wilco there is still a lot more work to be done for these builtins in the future. Testing: Bootstrapped and regtested on aarch64-none-linux-gnu and added new test. Is this ok for trunk? Sudi *** gcc/ChangeLog *** 2018-03-14 Sudakshina Das * builtins.c (expand_builtin_setjmp_receiver): Update condition to restore frame pointer. * config/aarch64/aarch64.h (DONT_USE_BUILTIN_SETJMP): Update comment. * config/aarch64/aarch64.c (aarch64_builtin_setjmp_frame_value): New. (TARGET_BUILTIN_SETJMP_FRAME_VALUE): Define. *** gcc/testsuite/ChangeLog *** 2018-03-14 Sudakshina Das * gcc.c-torture/execute/pr84521.c: New test. --------------ECF2D8368D8C7CC67B0970B4 Content-Type: text/x-patch; name="pr84521.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="pr84521.diff" Content-length: 3096 diff --git a/gcc/builtins.c b/gcc/builtins.c index 85affa7..640f1a9 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -898,7 +898,8 @@ expand_builtin_setjmp_receiver (rtx receiver_label) /* Now put in the code to restore the frame pointer, and argument pointer, if needed. */ - if (! targetm.have_nonlocal_goto ()) + if (! targetm.have_nonlocal_goto () + && targetm.builtin_setjmp_frame_value () != hard_frame_pointer_rtx) { /* First adjust our frame pointer to its actual value. It was previously set to the start of the virtual area corresponding to diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index e3c52f6..7a21c14 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -474,7 +474,9 @@ extern unsigned aarch64_architecture_version; #define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, R4_REGNUM) #define EH_RETURN_HANDLER_RTX aarch64_eh_return_handler_rtx () -/* Don't use __builtin_setjmp until we've defined it. */ +/* Don't use __builtin_setjmp until we've defined it. + CAUTION: This macro is only used during exception unwinding. + Don't fall for its name. */ #undef DONT_USE_BUILTIN_SETJMP #define DONT_USE_BUILTIN_SETJMP 1 diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index e1fb87f..e7ac0fe 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -12128,6 +12128,13 @@ aarch64_expand_builtin_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL); } +/* Implement TARGET_BUILTIN_SETJMP_FRAME_VALUE. */ +static rtx +aarch64_builtin_setjmp_frame_value (void) +{ + return hard_frame_pointer_rtx; +} + /* Implement TARGET_GIMPLIFY_VA_ARG_EXPR. */ static tree @@ -17505,6 +17512,9 @@ aarch64_run_selftests (void) #undef TARGET_FOLD_BUILTIN #define TARGET_FOLD_BUILTIN aarch64_fold_builtin +#undef TARGET_BUILTIN_SETJMP_FRAME_VALUE +#define TARGET_BUILTIN_SETJMP_FRAME_VALUE aarch64_builtin_setjmp_frame_value + #undef TARGET_FUNCTION_ARG #define TARGET_FUNCTION_ARG aarch64_function_arg diff --git a/gcc/testsuite/gcc.c-torture/execute/pr84521.c b/gcc/testsuite/gcc.c-torture/execute/pr84521.c new file mode 100644 index 0000000..76b10d2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr84521.c @@ -0,0 +1,49 @@ +/* { dg-require-effective-target indirect_jumps } */ + +#include + +jmp_buf buf; + +int uses_longjmp (void) +{ + __builtin_longjmp (buf, 1); +} + +int gl; +void after_longjmp (void) +{ + gl = 5; +} + +int +test_1 (int n) +{ + volatile int *p = alloca (n); + if (__builtin_setjmp (buf)) + { + after_longjmp (); + } + else + { + uses_longjmp (); + } + + return 0; +} + +int __attribute__ ((optimize ("no-omit-frame-pointer"))) +test_2 (int n) +{ + int i; + int *ptr = (int *)__builtin_alloca (sizeof (int) * n); + for (i = 0; i < n; i++) + ptr[i] = i; + test_1 (n); + return 0; +} + +int main (int argc, const char **argv) +{ + __builtin_memset (&buf, 0xaf, sizeof (buf)); + test_2 (100); +} --------------ECF2D8368D8C7CC67B0970B4--