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. */
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
#include "acle-compat.h"
|
#include "acle-compat.h"
|
||||||
|
#include "arm_asm.h"
|
||||||
|
|
||||||
.macro def_fn f p2align=0
|
.macro def_fn f p2align=0
|
||||||
.text
|
.text
|
||||||
|
@ -78,7 +79,11 @@
|
||||||
|
|
||||||
/* This code requires Thumb. */
|
/* This code requires Thumb. */
|
||||||
#if __ARM_ARCH_PROFILE == 'M'
|
#if __ARM_ARCH_PROFILE == 'M'
|
||||||
|
#if __ARM_ARCH >= 8
|
||||||
|
/* keep config inherited from -march=. */
|
||||||
|
#else
|
||||||
.arch armv7e-m
|
.arch armv7e-m
|
||||||
|
#endif /* if __ARM_ARCH >= 8 */
|
||||||
#else
|
#else
|
||||||
.arch armv6t2
|
.arch armv6t2
|
||||||
#endif
|
#endif
|
||||||
|
@ -100,8 +105,10 @@
|
||||||
#define tmp2 r5
|
#define tmp2 r5
|
||||||
|
|
||||||
def_fn strlen p2align=6
|
def_fn strlen p2align=6
|
||||||
|
.fnstart
|
||||||
|
.cfi_startproc
|
||||||
|
prologue 4 5 push_ip=HAVE_PAC_LEAF
|
||||||
pld [srcin, #0]
|
pld [srcin, #0]
|
||||||
strd r4, r5, [sp, #-8]!
|
|
||||||
bic src, srcin, #7
|
bic src, srcin, #7
|
||||||
mvn const_m1, #0
|
mvn const_m1, #0
|
||||||
ands tmp1, srcin, #7 /* (8 - bytes) to alignment. */
|
ands tmp1, srcin, #7 /* (8 - bytes) to alignment. */
|
||||||
|
@ -151,6 +158,7 @@ def_fn strlen p2align=6
|
||||||
beq .Lloop_aligned
|
beq .Lloop_aligned
|
||||||
|
|
||||||
.Lnull_found:
|
.Lnull_found:
|
||||||
|
.cfi_remember_state
|
||||||
cmp data1a, #0
|
cmp data1a, #0
|
||||||
itt eq
|
itt eq
|
||||||
addeq result, result, #4
|
addeq result, result, #4
|
||||||
|
@ -159,11 +167,11 @@ def_fn strlen p2align=6
|
||||||
rev data1a, data1a
|
rev data1a, data1a
|
||||||
#endif
|
#endif
|
||||||
clz data1a, data1a
|
clz data1a, data1a
|
||||||
ldrd r4, r5, [sp], #8
|
|
||||||
add result, result, data1a, lsr #3 /* Bits -> Bytes. */
|
add result, result, data1a, lsr #3 /* Bits -> Bytes. */
|
||||||
bx lr
|
epilogue 4 5 push_ip=HAVE_PAC_LEAF
|
||||||
|
|
||||||
.Lmisaligned8:
|
.Lmisaligned8:
|
||||||
|
.cfi_restore_state
|
||||||
ldrd data1a, data1b, [src]
|
ldrd data1a, data1b, [src]
|
||||||
and tmp2, tmp1, #3
|
and tmp2, tmp1, #3
|
||||||
rsb result, tmp1, #0
|
rsb result, tmp1, #0
|
||||||
|
@ -177,4 +185,7 @@ def_fn strlen p2align=6
|
||||||
movne data1a, const_m1
|
movne data1a, const_m1
|
||||||
mov const_0, #0
|
mov const_0, #0
|
||||||
b .Lstart_realigned
|
b .Lstart_realigned
|
||||||
|
.cfi_endproc
|
||||||
|
.cantunwind
|
||||||
|
.fnend
|
||||||
.size strlen, . - strlen
|
.size strlen, . - strlen
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
||||||
|
|
||||||
#include "acle-compat.h"
|
#include "acle-compat.h"
|
||||||
|
#include "arm_asm.h"
|
||||||
|
|
||||||
.macro def_fn f p2align=0
|
.macro def_fn f p2align=0
|
||||||
.text
|
.text
|
||||||
|
@ -33,8 +34,9 @@
|
||||||
.type \f, %function
|
.type \f, %function
|
||||||
\f:
|
\f:
|
||||||
.endm
|
.endm
|
||||||
|
#if __ARM_ARCH_PROFILE == 'M' && __ARM_ARCH >= 8
|
||||||
#if __ARM_ARCH_ISA_THUMB >= 2 && __ARM_ARCH >= 7
|
/* keep config inherited from -march=. */
|
||||||
|
#elif __ARM_ARCH_ISA_THUMB >= 2 && __ARM_ARCH >= 7
|
||||||
.arch armv7
|
.arch armv7
|
||||||
#else
|
#else
|
||||||
.arch armv6t2
|
.arch armv6t2
|
||||||
|
@ -44,11 +46,17 @@
|
||||||
.syntax unified
|
.syntax unified
|
||||||
|
|
||||||
def_fn strlen p2align=1
|
def_fn strlen p2align=1
|
||||||
|
.fnstart
|
||||||
|
.cfi_startproc
|
||||||
|
prologue
|
||||||
mov r3, r0
|
mov r3, r0
|
||||||
1: ldrb.w r2, [r3], #1
|
1: ldrb.w r2, [r3], #1
|
||||||
cmp r2, #0
|
cmp r2, #0
|
||||||
bne 1b
|
bne 1b
|
||||||
subs r0, r3, r0
|
subs r0, r3, r0
|
||||||
subs r0, #1
|
subs r0, #1
|
||||||
bx lr
|
epilogue
|
||||||
|
.cfi_endproc
|
||||||
|
.cantunwind
|
||||||
|
.fnend
|
||||||
.size strlen, . - strlen
|
.size strlen, . - strlen
|
||||||
|
|
Loading…
Reference in New Issue