newlib: libc: strlen M-profile PACBTI-enablement
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 commit is contained in:
parent
ebd922e77a
commit
5582536896
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue