From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1035) id 14D0D3858426; Tue, 10 Jan 2023 16:49:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 14D0D3858426 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1673369380; bh=eygZkvGZ7T5vSp2pU5qPLNRaBJZXzkTjQfXOnDPOfPU=; h=From:To:Subject:Date:From; b=MiJ/RPFrC/JtcPnOaK1CozTHWlrGM3aqHxotB2aNPR9ey7lhW3gEZAcNXwr+r6b1Y v7dlb6XOOs7KXd+7u5u+oHJocLLbMvdK2tFH1LwIDCWyOOMFKr07Cu+aIZDcwXp8mC sJjQwnRkDvt2EE66r/KcsJqDOTKYhQ/An9MrCrfE= 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: memcpy 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: db30cbee419b6c4d05da8072dc1e869697b93ff1 X-Git-Newrev: 60a50c2846f9ad259631598604a7410bee502c70 Message-Id: <20230110164940.14D0D3858426@sourceware.org> Date: Tue, 10 Jan 2023 16:49:40 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D60a50c2846f= 9ad259631598604a7410bee502c70 commit 60a50c2846f9ad259631598604a7410bee502c70 Author: Victor L. Do Nascimento Date: Wed Dec 21 11:25:36 2022 +0000 newlib: libc: memcpy 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. Diff: --- newlib/libc/machine/arm/memcpy-armv7m.S | 33 ++++++++++++++++++++++++-----= ---- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/newlib/libc/machine/arm/memcpy-armv7m.S b/newlib/libc/machine/= arm/memcpy-armv7m.S index c8bff36f6..ec1ad6485 100644 --- a/newlib/libc/machine/arm/memcpy-armv7m.S +++ b/newlib/libc/machine/arm/memcpy-armv7m.S @@ -46,6 +46,8 @@ __OPT_BIG_BLOCK_SIZE: Size of big block in words. Default to 64. __OPT_MID_BLOCK_SIZE: Size of big block in words. Default to 16. */ +#include "arm_asm.h" + #ifndef __OPT_BIG_BLOCK_SIZE #define __OPT_BIG_BLOCK_SIZE (4 * 16) #endif @@ -85,6 +87,8 @@ .global memcpy .thumb .thumb_func + .fnstart + .cfi_startproc .type memcpy, %function memcpy: @ r0: dst @@ -93,10 +97,11 @@ memcpy: #ifdef __ARM_FEATURE_UNALIGNED /* In case of UNALIGNED access supported, ip is not used in function body. */ + prologue push_ip=3DHAVE_PAC_LEAF mov ip, r0 #else - push {r0} -#endif + prologue 0 push_ip=3DHAVE_PAC_LEAF +#endif /* __ARM_FEATURE_UNALIGNED */ orr r3, r1, r0 ands r3, r3, #3 bne .Lmisaligned_copy @@ -178,15 +183,17 @@ memcpy: #endif /* __ARM_FEATURE_UNALIGNED */ =20 .Ldone: + .cfi_remember_state #ifdef __ARM_FEATURE_UNALIGNED mov r0, ip + epilogue push_ip=3DHAVE_PAC_LEAF #else - pop {r0} -#endif - bx lr + epilogue 0 push_ip=3DHAVE_PAC_LEAF +#endif /* __ARM_FEATURE_UNALIGNED */ =20 .align 2 .Lmisaligned_copy: + .cfi_restore_state #ifdef __ARM_FEATURE_UNALIGNED /* Define label DST_ALIGNED to BIG_BLOCK. It will go to aligned copy once destination is adjusted to aligned. */ @@ -247,6 +254,9 @@ memcpy: /* dst is aligned, but src isn't. Misaligned copy. */ =20 push {r4, r5} + .cfi_adjust_cfa_offset 8 + .cfi_rel_offset 4, 0 + .cfi_rel_offset 5, 4 subs r2, #4 =20 /* Backward r1 by misaligned bytes, to make r1 aligned. @@ -299,6 +309,9 @@ memcpy: adds r2, #4 subs r1, ip pop {r4, r5} + .cfi_restore 4 + .cfi_restore 5 + .cfi_adjust_cfa_offset -8 =20 #endif /* __ARM_FEATURE_UNALIGNED */ =20 @@ -321,9 +334,11 @@ memcpy: =20 #ifdef __ARM_FEATURE_UNALIGNED mov r0, ip + epilogue push_ip=3DHAVE_PAC_LEAF #else - pop {r0} -#endif - bx lr - + epilogue 0 push_ip=3DHAVE_PAC_LEAF +#endif /* __ARM_FEATURE_UNALIGNED */ + .cfi_endproc + .cantunwind + .fnend .size memcpy, .-memcpy