From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80051.outbound.protection.outlook.com [40.107.8.51]) by sourceware.org (Postfix) with ESMTPS id BA0573858C53 for ; Fri, 5 Aug 2022 10:52:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BA0573858C53 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=A97/4htiCsZh4rDHxGOgRZRRfg8nm5EEpGQcTofNbqQsuQpY3HP6Mt/Sj4lJXe7HOucMyK6wTKTz+dq3kMgR+VX5Eb4iCX0qjFE+2BPAcJEbFj5AUZ2XiWfUPcOJRi+RQGUzcdIEondEoPP+wHTcxU9TDcQkzqDRWIFoVQ3Zsp6EWDuD1WUa5CFs9plwGRA6PZvnCubSKrjVerNnOKFMAMsdIAqG6o7oun0q9gN5CAJ6Jr79YF51HEHMIGS0SxDTPalfu1wWDbFus+dIqb1roBgegKU/29V3viV0z3A89pkq3rFVgAZVrsyIiNc8XBZAnTQgo1E945TrbUP2VtKO4g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NpxenY7T9rmw93ou/OLQL0rwf5XA1GovHT4qJAf2zWA=; b=IQFoVKHOFtGU0K+v9kWbU73Wn8mYwqycBeCrx9GdoHXGDA4CA2CUYWdjK2ALMCRmcnafT3C+yKMR4ipi54jXvdMO+iVKZ+Y98V0CpdHkO72kiiNLgCM5rXfSQLr8RRuv6GXwrqX1fLhWhqq9h1VJcGfBHqh2KMaiqysbnY8TXtA0z+mtE32KZ0Y0ME33vrwBkISaAJV5ehGsLANBGAKHM1BGrU96owqGmVk3ks2VTGlg5mik6cUeSPRbwk+p6yN38D74vlUVfdAmmorK+qTssW/vYzi4j6mh9qm9/Ov4Vx4Jf5e74U3Mf8VjnQbZJXaykKUzWAggMOHrEoRE0A6X5A== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1, 1, smtp.mailfrom=arm.com] dmarc=[1, 1, header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NpxenY7T9rmw93ou/OLQL0rwf5XA1GovHT4qJAf2zWA=; b=7VNC3OklG5Ook1uL+2oJOml/NBJ13uUt/kbjOimWdQEDt5Unly57+iFc/8MF5sieVHiUFsk5aoOPTPYyHzRMk+Ve9vS5HGIStt7WI7EcHZ5SkOQPmhHDm9K4AbdhRxdSCptpuQk2PDuE2cfVCum+EbUp039kYVe7bXoPO4pWha4= Received: from AS9PR06CA0742.eurprd06.prod.outlook.com (2603:10a6:20b:487::23) by PAXPR08MB7367.eurprd08.prod.outlook.com (2603:10a6:102:229::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.14; Fri, 5 Aug 2022 10:52:00 +0000 Received: from VE1EUR03FT042.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:487:cafe::14) by AS9PR06CA0742.outlook.office365.com (2603:10a6:20b:487::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.14 via Frontend Transport; Fri, 5 Aug 2022 10:52:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT042.mail.protection.outlook.com (10.152.19.62) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.16 via Frontend Transport; Fri, 5 Aug 2022 10:52:00 +0000 Received: ("Tessian outbound 2af316122c7a:v123"); Fri, 05 Aug 2022 10:52:00 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 524c46812edbe92b X-CR-MTA-TID: 64aa7808 Received: from cef323dc1ca9.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id C011D19B-7E8C-4833-81F6-1962473AD069.1; Fri, 05 Aug 2022 10:51:53 +0000 Received: from EUR02-AM5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id cef323dc1ca9.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 05 Aug 2022 10:51:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VgtgvEvbq4M2Cq5l9q+tRsb6SH5SLknOO0Bjwh7NuRxbhs9DnJDT91VX7aJi7Fl01jEZM4WBwK5msObDFfqAF/F6LS2Zhb8Sqraf0J6iaCBZDSzSCj3CX4Bw/imqJeBY3c4OB73fX6rH+Mm52c3LiEiLCA4i/YNN3Tl2T6I7rnBfl5D7c5OYEly1onvSrFZ0GyVptKFy6T2EEK94tC1PqwvzF8H+fjDRB92IClb9TIWOoCqF4UtJnq4DXKOtUAwiVlYnVreQyUdQfacMTkRfPWNvXNT+L3zaJHrMlOkZ5QHmpTg2Fo8yhoOZevwHEvX8X6R4CJTuJb9iQTM4X9NI/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NpxenY7T9rmw93ou/OLQL0rwf5XA1GovHT4qJAf2zWA=; b=S0U7zvw96Ez54iMjCrXMPnVlxcCkC7auZlDZYk7PQC8dlzisBJRPcHRA8t3M8cJQOHHj3c/A+e/yU/6bHJ0+woGWdjhYWsw/jcYaupopS13DyjrYeAPnQar/DG0MXtLwrSWXiCC/7RBueh3lDDCt6uJrsBrBwL7NQlQpVcFN5tVhuoFdAJc9LeBaRqLwQZ4yzyCLDQSKrPs15HgFr0Gg0O/LIawpPI3EgZ0hXwrkXDjx/fF+nIttfGBVXoIZkpnzDAQKUwRr3mcrk7Js8Z8FZV+BU6DNM15DaZdtE8aAwUQa/VzDZ4bLeh9+WgRK1eE/mKM5yMWgotkm8S/vgIdD2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NpxenY7T9rmw93ou/OLQL0rwf5XA1GovHT4qJAf2zWA=; b=7VNC3OklG5Ook1uL+2oJOml/NBJ13uUt/kbjOimWdQEDt5Unly57+iFc/8MF5sieVHiUFsk5aoOPTPYyHzRMk+Ve9vS5HGIStt7WI7EcHZ5SkOQPmhHDm9K4AbdhRxdSCptpuQk2PDuE2cfVCum+EbUp039kYVe7bXoPO4pWha4= Received: from AS9PR06CA0511.eurprd06.prod.outlook.com (2603:10a6:20b:49d::6) by DB9PR08MB6412.eurprd08.prod.outlook.com (2603:10a6:10:23d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.14; Fri, 5 Aug 2022 10:51:49 +0000 Received: from AM5EUR03FT054.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:49d:cafe::ec) by AS9PR06CA0511.outlook.office365.com (2603:10a6:20b:49d::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.15 via Frontend Transport; Fri, 5 Aug 2022 10:51:48 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (40.67.248.234) by AM5EUR03FT054.mail.protection.outlook.com (10.152.16.212) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5504.16 via Frontend Transport; Fri, 5 Aug 2022 10:51:48 +0000 Received: from AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2507.9; Fri, 5 Aug 2022 10:51:47 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX01.Emea.Arm.com (10.251.26.4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.9; Fri, 5 Aug 2022 10:51:47 +0000 Received: from e125768 (10.2.78.50) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.9 via Frontend Transport; Fri, 5 Aug 2022 10:51:47 +0000 From: "Victor L. Do Nascimento" To: Richard Earnshaw CC: , Subject: Re: [PATCH v2 2/8] newlib: libc: strcmp M-profile PACBTI-enablement In-Reply-To: (Richard Earnshaw's message of "Thu, 4 Aug 2022 16:48:08 +0100") References: <20220803153524.20631-1-victor.donascimento@arm.com> <20220803153524.20631-3-victor.donascimento@arm.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux) Date: Fri, 5 Aug 2022 11:51:47 +0100 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-Office365-Filtering-Correlation-Id: 056caca7-a32d-49a7-f4cc-08da76d08642 X-MS-TrafficTypeDiagnostic: DB9PR08MB6412:EE_|VE1EUR03FT042:EE_|PAXPR08MB7367:EE_ x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: KAuazIgrcGsydtyMnA17XyS4xJ6MQ7VLIo+8H0olEDV9C62ABDz6ZgwLR8NOKkPy24qm9cCqX4GxfUr7+jTNneuZ2THOXwXDURhUblDwaEQN9o1mlveIa/RuVyJvqeS1lpkk0/3hOs7MN/NN9dC2KSyQXRABNxjON5rhq+ptRvoCsF9juggV5H3gVU6NXkZzhVSLJXsOd+C64pnuhjBLxaEeOkFJyO2lFXz2w0JtJqnvtElO0FLyuT9X6/gdcG9jBv0fTgTGXg+vC8NVgnODrBgNK+A7B2lmoapfvj1CEXrt24SQST6hjgsiQtX5vJz5Nc1qe2Qw3+5iA0NjtcHNEBFqKnay+4atAEAZ4OJ/uAZG3KWxEb/iF1HQQcCt3JwO6A1Bb+V4WAZ188edSmdFh3W2Mq5l35O3LFUF/wngMkWTehZraYHntjJGhEosk6a1sGP/DvpoXJteUOK1Nlzebfbn9Sw+de0euce5beHhq9AZEqSsejF7ya5j4aAlxJ0F3HbwpmR1uxEaXMr7H9+MdP3FV0F9j5VywCjhp0d82ciyPPQT1aYmEzZFmEmrVWxLLlaUDJsbLyWOiZ36DvVX4Twj1H5fG8FV7c78LHYvYaqL1ZkVZww98Kh/Ui5LomVwUIMtmJYMxPOCBL75UCn+GSxj15ltY8Gh34nCbUUR8USHn9Tft/uOByZREL8D2UCdZg2/jYk80zPXS50l4QXwNxGSIbNx2LrCDwaOsx7PWRk44UpkQWsDPIgSudVTv6LpRWble3e6eqb2ES9tKEix9vwYBw8E/g6xX+sxqh2AFmlzjjLvjVHieOs513RgFrY4wWcovRVO1BYePxk/kO6Nr/3OTRkksRXVcEOgG+mCtLY= X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230016)(4636009)(396003)(136003)(39860400002)(376002)(346002)(36840700001)(46966006)(40470700004)(82310400005)(478600001)(40480700001)(86362001)(4326008)(8676002)(70586007)(70206006)(316002)(54906003)(83380400001)(40460700003)(36860700001)(26005)(53546011)(356005)(82740400003)(41300700001)(336012)(426003)(81166007)(47076005)(2616005)(186003)(6862004)(8936002)(36756003)(2906002)(5660300002)(40753002)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6412 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 93a4b30e-da5e-4a79-848a-08da76d07f5e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gQniRcl5mnSW1FVlhNYOM3fRGSDJHuQuU1L1dLJEj1wtqE1MwRCnS1XZwqoJz13ohR1wmDWCmBPx4xx6XU0AIGgXFO2C9GcOvYQrYZWv5SnTBL+LxqtAVr81djxw/ahvrnckad2vM8JU+S2Zvzk4Q3ZnohScRcCR24nJImRVCbeWCimhJaxE7IXGEG1El6dFYhmRJLMVctK0OkaGcImBqR18U/vG0wBm6S3oyP4dLlpZk9k589J1iFIvUbniw0pGN++ROW2bXMGxvVP13KkSZZrRb2w/iZUijlb8eNiv9bjdMH/HANys7iQ8m262ystaJElc7cCWvLJ8SxOOqKD2PX6GcsihawJBA4fMghmwn2WVT/o/oySwwU7hzHq6WPF5eBvsw7hQ1oH66V2ut2QqO6toqrnAZ1Ksbu8lHci7aLmNYYSOulaERP+MYOHaHRC+KK5HHeRXw1ANhN+jnWHEa8FFw9NshKtBNrFNJoFYVje0QcKye7LUgAD03LwvhXYk/aEyfGBMmYKFGop2kNVODeZaHU6wgphPDbq7QoT7MOUuZTe7lbj5oxge6zaWDsehhZW9gYBxI8N2Z4VJFMZFD3cAmV/cdIXQg6z/AjOX73E4V/4K6rMO0akWlqmjNrqD0PPLIU8VfBcqR6Gbi80sFSGOkz6DuFUIHkBiOyVvrPBrJFd0Y+/GYaXPG6rZdeMdOMnRlK0xm4G1pMWZBnyh8M0KNUgGWcelUUZnUSmPD6A2bDRQyGdOBBI/0ucNJcAXhNpPMEBvO1bGo8uS/m+/rFs1ZI5Gau82qYtegfB6vMzYOCl9igGseETWnU+5kqWnlB1bQF5llYN7ztEBqym5rA== X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(13230016)(4636009)(39860400002)(376002)(346002)(396003)(136003)(36840700001)(46966006)(40470700004)(41300700001)(26005)(53546011)(86362001)(81166007)(82740400003)(83380400001)(47076005)(336012)(2616005)(426003)(186003)(36860700001)(40460700003)(70586007)(70206006)(316002)(8676002)(5660300002)(6862004)(2906002)(4326008)(82310400005)(478600001)(54906003)(36756003)(40480700001)(8936002)(40753002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2022 10:52:00.2594 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 056caca7-a32d-49a7-f4cc-08da76d08642 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB7367 X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, UNPARSEABLE_RELAY 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: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Aug 2022 10:52:17 -0000 Richard Earnshaw writes: > On 03/08/2022 16:35, Victor Do Nascimento wrote: >> Add function prologue/epilogue to conditionally add BTI landing pads >> and/or PAC code generation & authentication instructions depending on >> compilation flags. >> This patch enables PACBTI for all relevant variants of strcmp: >> * Newlib for armv8.1-m.main+pacbti >> * Newlib for armv8.1-m.main+pacbti+mve >> * Newlib-nano >> --- >> newlib/libc/machine/arm/strcmp-arm-tiny.S | 7 +++- >> newlib/libc/machine/arm/strcmp-armv7.S | 45 +++++++++++++++++------ >> newlib/libc/machine/arm/strcmp-armv7m.S | 36 +++++++++++++++--- >> 3 files changed, 71 insertions(+), 17 deletions(-) >> diff --git a/newlib/libc/machine/arm/strcmp-arm-tiny.S >> b/newlib/libc/machine/arm/strcmp-arm-tiny.S >> index 607a41daf..8085eb4df 100644 >> --- a/newlib/libc/machine/arm/strcmp-arm-tiny.S >> +++ b/newlib/libc/machine/arm/strcmp-arm-tiny.S >> @@ -29,10 +29,14 @@ >> /* Tiny version of strcmp in ARM state. Used only when optimizing >> for size. Also supports Thumb-2. */ >> +#include "pacbti.h" >> + >> .syntax unified >> def_fn strcmp >> + .fnstart >> .cfi_sections .debug_frame >> .cfi_startproc >> + pacbti_prologue > > See comment on patch1 about the names of these macros. > >> 1: >> ldrb r2, [r0], #1 >> ldrb r3, [r1], #1 >> @@ -42,6 +46,7 @@ def_fn strcmp >> beq 1b >> 2: >> subs r0, r2, r3 >> - bx lr >> + pacbti_epilogue >> .cfi_endproc >> + .fnend >> .size strcmp, . - strcmp >> diff --git a/newlib/libc/machine/arm/strcmp-armv7.S b/newlib/libc/machine/arm/strcmp-armv7.S >> index 2f93bfb73..584c89f7e 100644 >> --- a/newlib/libc/machine/arm/strcmp-armv7.S >> +++ b/newlib/libc/machine/arm/strcmp-armv7.S >> @@ -45,6 +45,8 @@ >> .thumb >> .syntax unified >> +#include "pacbti.h" >> + >> /* Parameters and result. */ >> #define src1 r0 >> #define src2 r1 >> @@ -91,8 +93,9 @@ >> ldrd r4, r5, [sp], #16 >> .cfi_restore 4 >> .cfi_restore 5 >> + .cfi_adjust_cfa_offset -16 > > This looks like it's an omission from the original file and thus > should be separated out as a separate patch. > >> sub result, result, r1, lsr #24 >> - bx lr >> + pacbti_epilogue >> #else >> /* To use the big-endian trick we'd have to reverse all three words. >> that's slower than this approach. */ >> @@ -112,22 +115,28 @@ >> ldrd r4, r5, [sp], #16 >> .cfi_restore 4 >> .cfi_restore 5 >> + .cfi_adjust_cfa_offset -16 >> sub result, result, r1 >> - bx lr >> + pacbti_epilogue >> #endif >> .endm >> + >> .text >> .p2align 5 >> + .fnstart >> + .cfi_sections .debug_frame >> + .cfi_startproc >> .Lstrcmp_start_addr: >> #ifndef STRCMP_NO_PRECHECK >> .Lfastpath_exit: >> sub r0, r2, r3 >> - bx lr >> + pacbti_epilogue >> nop >> #endif >> def_fn strcmp >> + pacbti_prologue >> #ifndef STRCMP_NO_PRECHECK >> ldrb r2, [src1] >> ldrb r3, [src2] >> @@ -136,16 +145,26 @@ def_fn strcmp >> cmpcs r2, r3 >> bne .Lfastpath_exit >> #endif >> - .cfi_sections .debug_frame >> - .cfi_startproc >> strd r4, r5, [sp, #-16]! >> - .cfi_def_cfa_offset 16 >> + .save {r4, r5} > > Hmm, I've just remembered that leaf functions cannot throw exceptions > (the EHABI only supports synchronous exceptions), so I don't think we > need .save directives at all. Instead, such functions should be > marked with ".cantunwind". You still want the dwarf unwind > information as that's for the debugger, it's just the '.save' > directives that aren't needed. > >> + .cfi_adjust_cfa_offset 16 >> +#if __HAVE_PAC_LEAF >> + .cfi_offset 4, -20 >> + .cfi_offset 5, -16 >> +#else >> .cfi_offset 4, -16 >> .cfi_offset 5, -12 >> +#endif /* __HAVE_PAC_LEAF */ > > Ugh! This is not the right way to do this. Instead (see comments on > patch 1) use a macro that defines the additional adjustment to use in > various contexts, something like > > .cfi_offset 4, -(16+PAC_UNALIGNED_CFI_ADJ) > >> orr tmp1, src1, src2 >> strd r6, r7, [sp, #8] >> + .save {r6, r7} >> +#if __HAVE_PAC_LEAF >> + .cfi_offset 6, -12 >> + .cfi_offset 7, -8 >> +#else >> .cfi_offset 6, -8 >> .cfi_offset 7, -4 >> +#endif /* __HAVE_PAC_LEAF */ >> mvn const_m1, #0 >> lsl r2, tmp1, #29 >> cbz r2, .Lloop_aligned8 >> @@ -270,7 +289,6 @@ def_fn strcmp >> ldr data1, [src1], #4 >> beq .Laligned_m2 >> bcs .Laligned_m1 >> - >> #ifdef STRCMP_NO_PRECHECK >> ldrb data2, [src2, #1] >> uxtb tmp1, data1, ror #BYTE1_OFFSET >> @@ -314,7 +332,8 @@ def_fn strcmp >> mov result, tmp1 >> ldr r4, [sp], #16 >> .cfi_restore 4 >> - bx lr >> + .cfi_adjust_cfa_offset -16 >> + pacbti_epilogue >> #ifndef STRCMP_NO_PRECHECK >> .Laligned_m1: >> @@ -364,8 +383,9 @@ def_fn strcmp >> /* R6/7 Not used in this sequence. */ >> .cfi_restore 6 >> .cfi_restore 7 >> + .cfi_adjust_cfa_offset -16 >> neg result, result >> - bx lr >> + pacbti_epilogue >> 6: >> .cfi_restore_state >> @@ -441,7 +461,8 @@ def_fn strcmp >> /* R6/7 not used in this sequence. */ >> .cfi_restore 6 >> .cfi_restore 7 >> - bx lr >> + .cfi_adjust_cfa_offset -16 >> + pacbti_epilogue >> .Lstrcmp_tail: >> .cfi_restore_state >> @@ -463,7 +484,9 @@ def_fn strcmp >> /* R6/7 not used in this sequence. */ >> .cfi_restore 6 >> .cfi_restore 7 >> + .cfi_adjust_cfa_offset -16 >> sub result, result, data2, lsr #24 >> - bx lr >> + pacbti_epilogue >> .cfi_endproc >> + .fnend >> .size strcmp, . - .Lstrcmp_start_addr >> diff --git a/newlib/libc/machine/arm/strcmp-armv7m.S b/newlib/libc/machine/arm/strcmp-armv7m.S >> index cdb4912df..fe1519f4d 100644 >> --- a/newlib/libc/machine/arm/strcmp-armv7m.S >> +++ b/newlib/libc/machine/arm/strcmp-armv7m.S >> @@ -29,6 +29,8 @@ >> /* Very similar to the generic code, but uses Thumb2 as implemented >> in ARMv7-M. */ >> +#include "pacbti.h" >> + >> /* Parameters and result. */ >> #define src1 r0 >> #define src2 r1 >> @@ -44,8 +46,10 @@ >> .thumb >> .syntax unified >> def_fn strcmp >> + .fnstart >> .cfi_sections .debug_frame >> .cfi_startproc >> + pacbti_prologue >> eor tmp1, src1, src2 >> tst tmp1, #3 >> /* Strings not at same byte offset from a word boundary. */ >> @@ -106,7 +110,7 @@ def_fn strcmp >> lsrs result, result, #24 >> subs result, result, data2 >> #endif >> - bx lr >> + pacbti_epilogue >> #if 0 >> @@ -214,12 +218,18 @@ def_fn strcmp >> cmpcs data1, data2 >> beq .Lstrcmp_unaligned >> sub result, data1, data2 >> - bx lr >> + pacbti_epilogue >> 2: >> stmfd sp!, {r5} >> - .cfi_def_cfa_offset 4 >> + .save {r5} >> + .cfi_adjust_cfa_offset 4 >> +#if __HAVE_PAC_LEAF >> + .cfi_offset 5, -8 /* Account for ip register already on stack. */ >> +#else >> .cfi_offset 5, -4 >> +#endif /* __HAVE_PAC_LEAF */ >> + >> ldr data1, [src1], #4 >> and tmp2, src2, #3 >> @@ -353,10 +363,17 @@ def_fn strcmp >> .Lstrcmp_done_equal: >> mov result, #0 >> .cfi_remember_state >> +#if __HAVE_PAC_LEAF >> + pop {r5, ip} >> + .cfi_restore 5 >> + .cfi_restore 143 >> + aut ip, lr, sp >> +#else >> ldmfd sp!, {r5} >> .cfi_restore 5 >> +#endif /* __HAVE_PAC_LEAF */ > > I think we could define a macro for this as well, something like > pop_reg_and_pac r5 This sounds good, but a survey through relevant function epilogues reveals a series of different `pop' scenarios. On the one hand, we have pop {r5, ip}, as we have here but on another we also have, for example, pop {r4,r5,r6,r7,ip}. Do we wish to provide a short-hand notation for one pop operation but not the other via macros? My initial understanding is that assembler macros don't provide us with the necessary flexibility to handle all relevant cases. I think the use of a macro here would greatly enhance code readability and by extension maintainability, but at first sight it feels inelegant to provide a solution applicable only to a single case of a more general problem. Any wisdom here would be appreciated. V. > While you're doing that, please change the single-register ldmfd into 'pop'. > >> .cfi_def_cfa_offset 0 >> - bx lr >> + bx lr > > stray change to the BX instruction. > >> .Lstrcmp_tail: >> .cfi_restore_state >> @@ -370,9 +387,18 @@ def_fn strcmp >> S2LOEQ data2, data2, #8 >> beq .Lstrcmp_tail >> sub result, r2, result >> +#if __HAVE_PAC_LEAF >> + pop {r5, ip} >> + .cfi_restore 5 >> + .cfi_restore 143 >> + .cfi_def_cfa_offset 0 >> + aut ip, lr, sp >> +#else >> ldmfd sp!, {r5} >> .cfi_restore 5 >> .cfi_def_cfa_offset 0 >> - bx lr >> +#endif /* __HAVE_PAC_LEAF */ > > Same as above > >> + bx lr > > tab between mnemonic and operands. > >> .cfi_endproc >> + .fnend >> .size strcmp, . - strcmp > > R.