So that the real culprit of native crashes can surface in the stack trace.
.equ kernel_cmpxchg, 0xFFFF0FC0
.equ kernel_atomic_base, 0xFFFF0FFF
__atomic_dec:
+ .fnstart
+ .save {r4, lr}
stmdb sp!, {r4, lr}
mov r2, r0
1: @ atomic_dec
add r0, r1, #1
ldmia sp!, {r4, lr}
bx lr
+ .fnend
__atomic_inc:
+ .fnstart
+ .save {r4, lr}
stmdb sp!, {r4, lr}
mov r2, r0
1: @ atomic_inc
sub r0, r1, #1
ldmia sp!, {r4, lr}
bx lr
+ .fnend
/* r0(old) r1(new) r2(addr) -> r0(zero_if_succeeded) */
__atomic_cmpxchg:
+ .fnstart
+ .save {r4, lr}
stmdb sp!, {r4, lr}
mov r4, r0 /* r4 = save oldvalue */
1: @ atomic_cmpxchg
2: @ atomic_cmpxchg
ldmia sp!, {r4, lr}
bx lr
+ .fnend
#else
#define KUSER_CMPXCHG 0xffffffc0
*/
memcmp:
+ .fnstart
PLD (r0, #0)
PLD (r1, #0)
moveq r0, #0
bxeq lr
+ .save {r4, lr}
/* save registers */
stmfd sp!, {r4, lr}
9: /* restore registers and return */
ldmfd sp!, {r4, lr}
bx lr
+ .fnend
*/
__memcmp16:
+ .fnstart
PLD (r0, #0)
PLD (r1, #0)
bx lr
+ .save {r4, lr}
/* save registers */
0: stmfd sp!, {r4, lr}
/* restore registers and return */
ldmnefd sp!, {r4, lr}
bxne lr
+ .fnend
#define NEON_MAX_PREFETCH_DISTANCE 320
memcpy:
+ .fnstart
mov ip, r0
cmp r2, #16
blt 4f @ Have less than 16 bytes to copy
ldrmib r3, [r1], #1
strmib r3, [ip], #1
bx lr
+ .fnend
#else /* __ARM_ARCH__ < 7 */