From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1035) id E10BB3858404; Tue, 10 Jan 2023 16:49:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E10BB3858404 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1673369369; bh=8IYnpsQRy/64zm1sMimuX2ql3AlBFHRDcpEBgnIXKgk=; h=From:To:Subject:Date:From; b=XL56johNmGTocM2krpwdQ7AW52TJ5Nm9CKu9w8+4hkbgNRwdcKu6Rt1HDoVvNaIDu AFXKRVxiYqKXQ67Nh7rgZXUUg7fguIPRAQXIHcKCjEE++llXDQ7mvTVsFkVZTOsMyQ hmpy21qDqZUBIH1h8woJObMbV7V1pZhPjLl3ebqE= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Richard Earnshaw To: newlib-cvs@sourceware.org Subject: [newlib-cygwin] newlib: libc: strlen M-profile PACBTI-enablement X-Act-Checkin: newlib-cygwin X-Git-Author: Victor L. Do Nascimento X-Git-Refname: refs/heads/master X-Git-Oldrev: ebd922e77af01fbb34c66398f4a426202822c0df X-Git-Newrev: 55825368961f3a9424f91406f8989d04f1df3b59 Message-Id: <20230110164929.E10BB3858404@sourceware.org> Date: Tue, 10 Jan 2023 16:49:29 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D55825368961= f3a9424f91406f8989d04f1df3b59 commit 55825368961f3a9424f91406f8989d04f1df3b59 Author: Victor L. Do Nascimento Date: Wed Dec 21 11:22:36 2022 +0000 newlib: libc: strlen M-profile PACBTI-enablement =20 Add function prologue/epilogue to conditionally add BTI landing pads and/or PAC code generation & authentication instructions depending on compilation flags. =20 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 Diff: --- 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/a= rm/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. */ =20 #include "acle-compat.h" +#include "arm_asm.h" =20 .macro def_fn f p2align=3D0 .text @@ -78,7 +79,11 @@ =20 /* This code requires Thumb. */ #if __ARM_ARCH_PROFILE =3D=3D 'M' +#if __ARM_ARCH >=3D 8 + /* keep config inherited from -march=3D. */ +#else .arch armv7e-m +#endif /* if __ARM_ARCH >=3D 8 */ #else .arch armv6t2 #endif @@ -100,8 +105,10 @@ #define tmp2 r5 =20 def_fn strlen p2align=3D6 + .fnstart + .cfi_startproc + prologue 4 5 push_ip=3DHAVE_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=3D6 beq .Lloop_aligned =20 .Lnull_found: + .cfi_remember_state cmp data1a, #0 itt eq addeq result, result, #4 @@ -159,11 +167,11 @@ def_fn strlen p2align=3D6 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=3DHAVE_PAC_LEAF =20 .Lmisaligned8: + .cfi_restore_state ldrd data1a, data1b, [src] and tmp2, tmp1, #3 rsb result, tmp1, #0 @@ -177,4 +185,7 @@ def_fn strlen p2align=3D6 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/machi= ne/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. */ =20 #include "acle-compat.h" +#include "arm_asm.h" =20 .macro def_fn f p2align=3D0 .text @@ -33,8 +34,9 @@ .type \f, %function \f: .endm - -#if __ARM_ARCH_ISA_THUMB >=3D 2 && __ARM_ARCH >=3D 7 +#if __ARM_ARCH_PROFILE =3D=3D 'M' && __ARM_ARCH >=3D 8 + /* keep config inherited from -march=3D. */ +#elif __ARM_ARCH_ISA_THUMB >=3D 2 && __ARM_ARCH >=3D 7 .arch armv7 #else .arch armv6t2 @@ -44,11 +46,17 @@ .syntax unified =20 def_fn strlen p2align=3D1 + .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