From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id B7F4D3858C1F for ; Tue, 22 Nov 2022 15:20:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B7F4D3858C1F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=foss.arm.com Authentication-Results: sourceware.org; spf=none smtp.mailfrom=foss.arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id EE64D1FB; Tue, 22 Nov 2022 07:20:25 -0800 (PST) Received: from [10.2.78.76] (unknown [10.2.78.76]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E395D3F73D; Tue, 22 Nov 2022 07:20:18 -0800 (PST) Message-ID: <3feae8ef-d8db-1857-2e2e-368db885567b@foss.arm.com> Date: Tue, 22 Nov 2022 15:20:17 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH v4 3/8] newlib: libc: strlen M-profile PACBTI-enablement Content-Language: en-GB To: "Victor L. Do Nascimento" , newlib@sourceware.org Cc: Richard.Earnshaw@arm.com References: From: Richard Earnshaw In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3495.8 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,NICE_REPLY_A,SPF_HELO_NONE,SPF_NONE,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 List-Id: On 26/10/2022 12:47, 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 strlen: > * Newlib for armv8.1-m.main+pacbti > * Newlib for armv8.1-m.main+pacbti+mve > * Newlib-nano This is OK. It's slightly unfortunate that we can nolonger have the PLD instruction before the prologue, but it is what it is. R. > --- > newlib/libc/machine/arm/strlen-armv7.S | 17 ++++++++++++++--- > newlib/libc/machine/arm/strlen-thumb2-Os.S | 14 +++++++++++--- > 2 files changed, 25 insertions(+), 6 deletions(-) > > diff --git a/newlib/libc/machine/arm/strlen-armv7.S b/newlib/libc/machine/arm/strlen-armv7.S > index f3dda0d60..27094040c 100644 > --- a/newlib/libc/machine/arm/strlen-armv7.S > +++ b/newlib/libc/machine/arm/strlen-armv7.S > @@ -59,6 +59,7 @@ > OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ > > #include "acle-compat.h" > +#include "arm_asm.h" > > .macro def_fn f p2align=0 > .text > @@ -78,7 +79,11 @@ > > /* This code requires Thumb. */ > #if __ARM_ARCH_PROFILE == 'M' > +#if __ARM_ARCH >= 8 > + /* keep config inherited from -march=. */ > +#else > .arch armv7e-m > +#endif /* if __ARM_ARCH >= 8 */ > #else > .arch armv6t2 > #endif > @@ -100,8 +105,10 @@ > #define tmp2 r5 > > def_fn strlen p2align=6 > + .fnstart > + .cfi_startproc > + prologue 4 5 push_ip=HAVE_PAC_LEAF > pld [srcin, #0] > - strd r4, r5, [sp, #-8]! > bic src, srcin, #7 > mvn const_m1, #0 > ands tmp1, srcin, #7 /* (8 - bytes) to alignment. */ > @@ -151,6 +158,7 @@ def_fn strlen p2align=6 > beq .Lloop_aligned > > .Lnull_found: > + .cfi_remember_state > cmp data1a, #0 > itt eq > addeq result, result, #4 > @@ -159,11 +167,11 @@ def_fn strlen p2align=6 > rev data1a, data1a > #endif > clz data1a, data1a > - ldrd r4, r5, [sp], #8 > add result, result, data1a, lsr #3 /* Bits -> Bytes. */ > - bx lr > + epilogue 4 5 push_ip=HAVE_PAC_LEAF > > .Lmisaligned8: > + .cfi_restore_state > ldrd data1a, data1b, [src] > and tmp2, tmp1, #3 > rsb result, tmp1, #0 > @@ -177,4 +185,7 @@ def_fn strlen p2align=6 > movne data1a, const_m1 > mov const_0, #0 > b .Lstart_realigned > + .cfi_endproc > + .cantunwind > + .fnend > .size strlen, . - strlen > diff --git a/newlib/libc/machine/arm/strlen-thumb2-Os.S b/newlib/libc/machine/arm/strlen-thumb2-Os.S > index 961f41a0a..a46db573c 100644 > --- a/newlib/libc/machine/arm/strlen-thumb2-Os.S > +++ b/newlib/libc/machine/arm/strlen-thumb2-Os.S > @@ -25,6 +25,7 @@ > OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ > > #include "acle-compat.h" > +#include "arm_asm.h" > > .macro def_fn f p2align=0 > .text > @@ -33,8 +34,9 @@ > .type \f, %function > \f: > .endm > - > -#if __ARM_ARCH_ISA_THUMB >= 2 && __ARM_ARCH >= 7 > +#if __ARM_ARCH_PROFILE == 'M' && __ARM_ARCH >= 8 > + /* keep config inherited from -march=. */ > +#elif __ARM_ARCH_ISA_THUMB >= 2 && __ARM_ARCH >= 7 > .arch armv7 > #else > .arch armv6t2 > @@ -44,11 +46,17 @@ > .syntax unified > > def_fn strlen p2align=1 > + .fnstart > + .cfi_startproc > + prologue > mov r3, r0 > 1: ldrb.w r2, [r3], #1 > cmp r2, #0 > bne 1b > subs r0, r3, r0 > subs r0, #1 > - bx lr > + epilogue > + .cfi_endproc > + .cantunwind > + .fnend > .size strlen, . - strlen