From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on2057.outbound.protection.outlook.com [40.107.14.57]) by sourceware.org (Postfix) with ESMTPS id 834FF3858D28 for ; Fri, 6 Jan 2023 21:35:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 834FF3858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=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=L8P5RARRHQxvW/5VYJ4zJmAqRObpe9iYNX9u4vUwgLg=; b=edGOBQGMxPeBeyMEHCX5bJ9rVOr0Boc/z/tu1DTySYU6sTgkjSHTc3SZC0rs8cojbJ1VaKdUYG19xHxDgV538Y2eJ6ph9U+fz3M11HkmYPllFJPWOhfRZNHvs+h+4OjFN0iap3SsR1q5FzItIwzb3ts//HKMkxHNQp9U/RkpM0s= Received: from AS8P250CA0015.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:330::20) by AS2PR08MB8503.eurprd08.prod.outlook.com (2603:10a6:20b:55e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.9; Fri, 6 Jan 2023 21:35:21 +0000 Received: from AM7EUR03FT033.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:330:cafe::c3) by AS8P250CA0015.outlook.office365.com (2603:10a6:20b:330::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.16 via Frontend Transport; Fri, 6 Jan 2023 21:35:21 +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 AM7EUR03FT033.mail.protection.outlook.com (100.127.140.129) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.14 via Frontend Transport; Fri, 6 Jan 2023 21:35:21 +0000 Received: ("Tessian outbound 3ad958cd7492:v132"); Fri, 06 Jan 2023 21:35:21 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 39d9c64c6a021ff5 X-CR-MTA-TID: 64aa7808 Received: from f4ee3a258124.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id B4B54194-9ED4-4EDD-A228-97A42D6DBF87.1; Fri, 06 Jan 2023 21:35:15 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f4ee3a258124.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 06 Jan 2023 21:35:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KMziDMojmcbASigJVgXEuk7ag1D3/N2X1rTcmoYKpGxobYCpY98OS+zOomYO10VdtzG9nCq1pMx1bO+/q1LLthwEF2TJnbIkjmDwexHdkJNy1y+KybM9Esf9ZNKhT24W3UJD26dsSB73S5mP6jmGQGdxuMzxun+bHkeBF3JbNAok9LHP845ZvUX57dC5nUyfeSzu2uPPQUIRp1HXdGpnllTWlnT9GACH9m6DMRtRkxvSz7hcyTQg/T648zw6t3qa+rqP5FDSBxzMV9HZWszFJivfSOAOkBItnRFmUFAhZB9raBCZOTASO/Z/4mNzlJYDiXI8y4yefXKLhqyntssx/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=L8P5RARRHQxvW/5VYJ4zJmAqRObpe9iYNX9u4vUwgLg=; b=UdJQh/M9sQPGg+r7idnG102vKkwYjX+F8UCDweppLR5FFElkckfE/mWjitOZEiX7yov4HDOXR5QX/OMdy9mgRheyArX6sIF3wp/AXFoAeOIQ3mzv6SpInp41l6SbxQCAulp71qlMwUqCC0SiVz/UcIf+eL/y09oB5Jbxs1stGCv5P8VMvgTKeKScemmf8QpalhVVLBVJm0HwgYXOOTmgrMQZR5ff0LJp2acnLK4JlicC1KFHdT/YBzZOauNEfxr7xluCvc/oMoaKIP2Z6buvMdtoad4mZIL89gawMZCuZevZwdrhXqeXJ2S66YXeE4fEtMqG0MVZ2y9j64Seewb/BA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; 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=L8P5RARRHQxvW/5VYJ4zJmAqRObpe9iYNX9u4vUwgLg=; b=edGOBQGMxPeBeyMEHCX5bJ9rVOr0Boc/z/tu1DTySYU6sTgkjSHTc3SZC0rs8cojbJ1VaKdUYG19xHxDgV538Y2eJ6ph9U+fz3M11HkmYPllFJPWOhfRZNHvs+h+4OjFN0iap3SsR1q5FzItIwzb3ts//HKMkxHNQp9U/RkpM0s= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DBBPR08MB5993.eurprd08.prod.outlook.com (2603:10a6:10:1f4::23) by AS8PR08MB6696.eurprd08.prod.outlook.com (2603:10a6:20b:395::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.14; Fri, 6 Jan 2023 21:35:13 +0000 Received: from DBBPR08MB5993.eurprd08.prod.outlook.com ([fe80::8e37:2d67:6a09:280b]) by DBBPR08MB5993.eurprd08.prod.outlook.com ([fe80::8e37:2d67:6a09:280b%9]) with mapi id 15.20.5986.014; Fri, 6 Jan 2023 21:35:13 +0000 Message-ID: <323dc84a-5b8c-fd13-0377-b361ff5fcd7b@arm.com> Date: Fri, 6 Jan 2023 21:35:20 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH v5 2/8] newlib: libc: strcmp M-profile PACBTI-enablement Content-Language: en-US To: Christophe Lyon , newlib@sourceware.org Cc: Richard Earnshaw References: From: Victor Do Nascimento In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: LO2P265CA0075.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:8::15) To DBBPR08MB5993.eurprd08.prod.outlook.com (2603:10a6:10:1f4::23) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DBBPR08MB5993:EE_|AS8PR08MB6696:EE_|AM7EUR03FT033:EE_|AS2PR08MB8503:EE_ X-MS-Office365-Filtering-Correlation-Id: c884b830-ded1-48ec-4648-08daf02dea15 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: qCVREwJbIyHHkNZUY1P/NrSbzZi2BlENCHcK/rp8DXGhvoicY1j4dgBhW7kgIgXW2ria8Pzyk0uooOtrOdQrF80Nfl9EU3aft3BJAX/TL9dOjw/sBD9t3ip0K/H7v2JKgZV9Q7/U0b2S3sgsE2HSvb1SbnKTOg4/wZW8R9iGlmHRKc7tvjaJAcDNJfGdEfUogjdxvlahgbqGMvy14UjHSSvldfpyJgBXHID1xdskk9tORT+v+/gHHIKVdH/ifHouou2h7f+HacgferuzViiY5ar/Wtdw+bKgHXzPHnUHlVdziP7wah6WX0gx9KBPFtvDFi9cb5VmQPr2OVPyYAnpYsFtnqOYCl9vTm3HGQIVxovYzzH1UUYUVUVQcBcyo5azN0wMPQ4tM8Zgprh9AgUXjJpUWPk7CgxlLvrnqa5unoZZW2CPYWD9aJmlmWJXv2V8kT7nNWffVpbF+C22YbKHgLsdskJ/FQfxyh8J63LwqXtc2Ay3n1PvqFulPLV3N7Pdu6EFc+lgvLQpfjpGf3UITLqS5nS8qQKaDqzyAinOEw8DZMbiWWMGo3DSxnU/6jhvMusTnXM1EELCiC5AxRb1mlWi61DhTu4q94a2qo7oOsTUC1nTISgZgfU9SeNL/Az4V9a6Bo1nd6cr8zyl7p/xGCiq2T+xpZf/HF5OdsvskKn/5wS5/JsBlcywY4oRo16b6QvRO1FPKpT+hIxD0A/v3z8qSG1l+NyFqwYgEwQuP4GDbSRy9d4Aju2FK1ciqAqG X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR08MB5993.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(376002)(366004)(346002)(396003)(39860400002)(136003)(451199015)(2616005)(8676002)(316002)(66946007)(66556008)(4326008)(66476007)(83380400001)(8936002)(41300700001)(38100700002)(5660300002)(2906002)(36756003)(6506007)(26005)(186003)(478600001)(6486002)(53546011)(6666004)(31686004)(31696002)(86362001)(6512007)(40753002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6696 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: e51dc33f-7f51-481f-d8df-08daf02de50e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: f5P1zRqpqlR3NI2BPFp0SIRYctwbdVLcvnu2aNVw1NL2G/3tccewO1uzw1FXjR0mFv4PHYDWvFagpKrfpBcUQ+CPxjGuoRfoOL+HfbIBqlzu79Wnm1EV3krmEa6ME44GVx9G85MjbHI5zZPU27by5q3l9lRmUm2pWS/kqnnqddSt5t2cVvhfZDFcLR5eDfG8ZKEkP3/Rz3G+NwwoHUk/nKNq3KCEhLBdSnAbTnwyF9JwEkl7YQLtD9XSsUhqEP8UziplJqHVnHkn+TjufHSGpLRqKwQBZ1qdx2Y4wco+tu/CQeNL61pXvwaNm1wIQkWgoXYgsLGHWtgxW4/b2i3ShU2BDiwKjfb0RUEv9yZf+tmcprPWOFgz4nLHVGjbgA6kBUmWn8YL6qsnxhetL0u2kchdzId3EqnHDfqY+Eg8fbBKvT6EAh6BO1npTiC7MbUMfK6O8YCkvMqZw00cydFQajXK41CVGClHM1o73Oo/+w/k33vbWmFxCr+fqObKO3UYXGNIOulap0WVwba3mW9R3F45dAti21EIOSlyWQ4MO1s8jNLmz9ZuAVKTPogSyZB8npBqCXUmG/njZtY665Xw8ly+318dVH9cjDfb1uU/LnxcpHsl9ZMLllHguoxset9hPFfOCPxxY/zJtJLdDxjCe4TluBjKIgORrcaUsb5JN7QgQcZ1M7RwaONa4MuTGB0NP1SJCvWXuobHaqLVtWQr/aCFY2EC1nbNpLYSC0bELtRg9Z1Bn/FTyezQ8OBYzRsBDVLDUssl/R8w8juhQAF0uw== 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:(13230022)(4636009)(39860400002)(396003)(346002)(376002)(136003)(451199015)(36840700001)(40470700004)(46966006)(31686004)(36756003)(82310400005)(2906002)(40460700003)(86362001)(36860700001)(82740400003)(81166007)(356005)(316002)(336012)(186003)(83380400001)(6666004)(26005)(40480700001)(53546011)(6506007)(2616005)(31696002)(6512007)(41300700001)(6486002)(4326008)(478600001)(8676002)(70206006)(8936002)(5660300002)(70586007)(47076005)(40753002)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2023 21:35:21.7022 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c884b830-ded1-48ec-4648-08daf02dea15 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: AM7EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8503 X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,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 List-Id: On 1/6/23 11:09, Christophe Lyon wrote: > > > On 12/21/22 12:21, Victor L. 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 |  8 +++- >>   newlib/libc/machine/arm/strcmp-armv7.S    | 57 ++++++++++++++--------- >>   newlib/libc/machine/arm/strcmp-armv7m.S   | 26 +++++++---- >>   3 files changed, 60 insertions(+), 31 deletions(-) >> >> diff --git a/newlib/libc/machine/arm/strcmp-arm-tiny.S >> b/newlib/libc/machine/arm/strcmp-arm-tiny.S >> index 607a41daf..0bd2a2e6e 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 "arm_asm.h" >> + >>       .syntax unified >>   def_fn strcmp >> +    .fnstart >>       .cfi_sections .debug_frame >>       .cfi_startproc >> +    prologue > why no push_ip=HAVE_PAC_LEAF ? > Is that because this is a tiny version and we don't want to use an extra > push ip even it pacbti is enabled? push_ip=HAVE_PAC_LEAF is reserved for a particular scenario. If we're PAC-signing leaf functions (that is, HAVE_PAC_LEAF is set) but the intraprocedural scratch register r12 is not used in the function body, there's no strict need to push the pac-code onto the stack, so push_ip defaults to a potentially overridable value of PAC_LEAF_PUSH_IP. If, on the other hand, r12 is used as part of the function body, our PAC-code will be corrupted. In such cases, pushing ip should be strictly dictated by the fact that we have requested leaf function PAC-signing, so that it can later be restored. Therefore, if r12 is corrupted and HAVE_PAC_LEAF is set we should push ip to the stack irrespective of any overrides, and that's where push_ip=HAVE_PAC_LEAF is important. as strcmp-arm-tiny.S doesn't use r12, we have flexibility over whether or not to push ip onto stack. That's why we have simply `push_ip' and not `push_ip=HAVE_PAC_LEAF'. strcmp-armv7.S and strcmp-armv7m.S represent the opposite scenario. :-) Regards, Victor >>   1: >>       ldrb    r2, [r0], #1 >>       ldrb    r3, [r1], #1 >> @@ -42,6 +46,8 @@ def_fn strcmp >>       beq    1b >>   2: >>       subs    r0, r2, r3 >> -    bx    lr >> +    epilogue >>       .cfi_endproc >> +    .cantunwind >> +    .fnend >>       .size    strcmp, . - strcmp >> diff --git a/newlib/libc/machine/arm/strcmp-armv7.S >> b/newlib/libc/machine/arm/strcmp-armv7.S >> index 2f93bfb73..7cafca151 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 "arm_asm.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 >>       sub    result, result, r1, lsr #24 >> -    bx    lr >> +    epilogue push_ip=HAVE_PAC_LEAF >>   #else >>       /* To use the big-endian trick we'd have to reverse all three >> words. >>          that's slower than this approach.  */ >> @@ -112,22 +115,21 @@ >>       ldrd    r4, r5, [sp], #16 >>       .cfi_restore 4 >>       .cfi_restore 5 >> +    .cfi_adjust_cfa_offset -16 >>       sub    result, result, r1 >> -    bx    lr >> +    epilogue push_ip=HAVE_PAC_LEAF >>   #endif >>       .endm >> + >>       .text >>       .p2align    5 >> -.Lstrcmp_start_addr: >> -#ifndef STRCMP_NO_PRECHECK >> -.Lfastpath_exit: >> -    sub    r0, r2, r3 >> -    bx    lr >> -    nop >> -#endif >>   def_fn    strcmp >> +    .fnstart >> +    .cfi_sections .debug_frame >> +    .cfi_startproc >> +    prologue push_ip=HAVE_PAC_LEAF >>   #ifndef STRCMP_NO_PRECHECK >>       ldrb    r2, [src1] >>       ldrb    r3, [src2] >> @@ -136,16 +138,14 @@ 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 >> -    .cfi_offset 4, -16 >> -    .cfi_offset 5, -12 >> +    .cfi_adjust_cfa_offset 16 >> +    .cfi_rel_offset 4, 0 >> +    .cfi_rel_offset 5, 4 >>       orr    tmp1, src1, src2 >>       strd    r6, r7, [sp, #8] >> -    .cfi_offset 6, -8 >> -    .cfi_offset 7, -4 >> +    .cfi_rel_offset 6, 8 >> +    .cfi_rel_offset 7, 12 >>       mvn    const_m1, #0 >>       lsl    r2, tmp1, #29 >>       cbz    r2, .Lloop_aligned8 >> @@ -270,7 +270,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,10 +313,19 @@ def_fn    strcmp >>       mov    result, tmp1 >>       ldr    r4, [sp], #16 >>       .cfi_restore 4 >> -    bx    lr >> +    .cfi_adjust_cfa_offset -16 >> +    epilogue push_ip=HAVE_PAC_LEAF >>   #ifndef STRCMP_NO_PRECHECK >> +.Lfastpath_exit: >> +    .cfi_restore_state >> +    .cfi_remember_state >> +    sub    r0, r2, r3 >> +    epilogue push_ip=HAVE_PAC_LEAF >> + >>   .Laligned_m1: >> +    .cfi_restore_state >> +    .cfi_remember_state >>       add    src2, src2, #4 >>   #endif >>   .Lsrc1_aligned: >> @@ -364,8 +372,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 >> +    epilogue push_ip=HAVE_PAC_LEAF >>   6: >>       .cfi_restore_state >> @@ -441,7 +450,8 @@ def_fn    strcmp >>       /* R6/7 not used in this sequence.  */ >>       .cfi_restore 6 >>       .cfi_restore 7 >> -    bx    lr >> +    .cfi_adjust_cfa_offset -16 >> +    epilogue push_ip=HAVE_PAC_LEAF >>   .Lstrcmp_tail: >>       .cfi_restore_state >> @@ -463,7 +473,10 @@ 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 >> +    epilogue push_ip=HAVE_PAC_LEAF >>       .cfi_endproc >> -    .size strcmp, . - .Lstrcmp_start_addr >> +    .cantunwind >> +    .fnend >> +    .size strcmp, . - strcmp >> diff --git a/newlib/libc/machine/arm/strcmp-armv7m.S >> b/newlib/libc/machine/arm/strcmp-armv7m.S >> index cdb4912df..825b6e77f 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 "arm_asm.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 >> +    prologue push_ip=HAVE_PAC_LEAF >>       eor    tmp1, src1, src2 >>       tst    tmp1, #3 >>       /* Strings not at same byte offset from a word boundary.  */ >> @@ -82,6 +86,7 @@ def_fn strcmp >>       ldreq    data2, [src2], #4 >>       beq    4b >>   2: >> +    .cfi_remember_state >>       /* There's a zero or a different byte in the word */ >>       S2HI    result, data1, #24 >>       S2LO    data1, data1, #8 >> @@ -106,7 +111,7 @@ def_fn strcmp >>       lsrs    result, result, #24 >>       subs    result, result, data2 >>   #endif >> -    bx    lr >> +    epilogue push_ip=HAVE_PAC_LEAF >>   #if 0 >> @@ -205,8 +210,10 @@ def_fn strcmp >>       /* First of all, compare bytes until src1(sp1) is word-aligned. */ >>   .Lstrcmp_unaligned: >> +    .cfi_restore_state >>       tst    src1, #3 >>       beq    2f >> +    .cfi_remember_state >>       ldrb    data1, [src1], #1 >>       ldrb    data2, [src2], #1 >>       cmp    data1, #1 >> @@ -214,12 +221,13 @@ def_fn strcmp >>       cmpcs    data1, data2 >>       beq    .Lstrcmp_unaligned >>       sub    result, data1, data2 >> -    bx    lr >> +    epilogue push_ip=HAVE_PAC_LEAF >>   2: >> +    .cfi_restore_state >>       stmfd    sp!, {r5} >> -    .cfi_def_cfa_offset 4 >> -    .cfi_offset 5, -4 >> +    .cfi_adjust_cfa_offset 4 >> +    .cfi_rel_offset 5, 0 >>       ldr    data1, [src1], #4 >>       and    tmp2, src2, #3 >> @@ -355,8 +363,8 @@ def_fn strcmp >>       .cfi_remember_state >>       ldmfd    sp!, {r5} >>       .cfi_restore 5 >> -    .cfi_def_cfa_offset 0 >> -    bx    lr >> +    .cfi_adjust_cfa_offset -4 >> +    epilogue push_ip=HAVE_PAC_LEAF >>   .Lstrcmp_tail: >>       .cfi_restore_state >> @@ -372,7 +380,9 @@ def_fn strcmp >>       sub    result, r2, result >>       ldmfd    sp!, {r5} >>       .cfi_restore 5 >> -    .cfi_def_cfa_offset 0 >> -    bx    lr >> +    .cfi_adjust_cfa_offset -4 >> +    epilogue push_ip=HAVE_PAC_LEAF >>       .cfi_endproc >> +    .cantunwind >> +    .fnend >>       .size strcmp, . - strcmp