Commit bd192b47 authored by Ben Cheng's avatar Ben Cheng
Browse files

Add stack unwinding directives to assembly leaf functions.

So that the real culprit of native crashes can surface in the stack trace.
parent 82420129
......@@ -41,6 +41,8 @@
.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
......@@ -53,8 +55,11 @@ __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
......@@ -67,9 +72,12 @@ __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
......@@ -84,6 +92,7 @@ __atomic_cmpxchg:
2: @ atomic_cmpxchg
ldmia sp!, {r4, lr}
bx lr
.fnend
#else
#define KUSER_CMPXCHG 0xffffffc0
......
......@@ -44,6 +44,7 @@
*/
memcmp:
.fnstart
PLD (r0, #0)
PLD (r1, #0)
......@@ -53,6 +54,7 @@ memcmp:
moveq r0, #0
bxeq lr
.save {r4, lr}
/* save registers */
stmfd sp!, {r4, lr}
......@@ -174,6 +176,7 @@ memcmp:
9: /* restore registers and return */
ldmfd sp!, {r4, lr}
bx lr
.fnend
......
......@@ -44,6 +44,7 @@
*/
__memcmp16:
.fnstart
PLD (r0, #0)
PLD (r1, #0)
......@@ -79,6 +80,7 @@ __memcmp16:
bx lr
.save {r4, lr}
/* save registers */
0: stmfd sp!, {r4, lr}
......@@ -93,6 +95,7 @@ __memcmp16:
/* restore registers and return */
ldmnefd sp!, {r4, lr}
bxne lr
.fnend
......
......@@ -40,6 +40,7 @@
#define NEON_MAX_PREFETCH_DISTANCE 320
memcpy:
.fnstart
mov ip, r0
cmp r2, #16
blt 4f @ Have less than 16 bytes to copy
......@@ -128,6 +129,7 @@ memcpy:
ldrmib r3, [r1], #1
strmib r3, [ip], #1
bx lr
.fnend
#else /* __ARM_ARCH__ < 7 */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment