Add stack unwinding directives to assembly leaf functions.
So that the real culprit of native crashes can surface in the stack trace.
This commit is contained in:
parent
824201294b
commit
bd192b470b
@ -41,6 +41,8 @@
|
|||||||
.equ kernel_cmpxchg, 0xFFFF0FC0
|
.equ kernel_cmpxchg, 0xFFFF0FC0
|
||||||
.equ kernel_atomic_base, 0xFFFF0FFF
|
.equ kernel_atomic_base, 0xFFFF0FFF
|
||||||
__atomic_dec:
|
__atomic_dec:
|
||||||
|
.fnstart
|
||||||
|
.save {r4, lr}
|
||||||
stmdb sp!, {r4, lr}
|
stmdb sp!, {r4, lr}
|
||||||
mov r2, r0
|
mov r2, r0
|
||||||
1: @ atomic_dec
|
1: @ atomic_dec
|
||||||
@ -53,8 +55,11 @@ __atomic_dec:
|
|||||||
add r0, r1, #1
|
add r0, r1, #1
|
||||||
ldmia sp!, {r4, lr}
|
ldmia sp!, {r4, lr}
|
||||||
bx lr
|
bx lr
|
||||||
|
.fnend
|
||||||
|
|
||||||
__atomic_inc:
|
__atomic_inc:
|
||||||
|
.fnstart
|
||||||
|
.save {r4, lr}
|
||||||
stmdb sp!, {r4, lr}
|
stmdb sp!, {r4, lr}
|
||||||
mov r2, r0
|
mov r2, r0
|
||||||
1: @ atomic_inc
|
1: @ atomic_inc
|
||||||
@ -67,9 +72,12 @@ __atomic_inc:
|
|||||||
sub r0, r1, #1
|
sub r0, r1, #1
|
||||||
ldmia sp!, {r4, lr}
|
ldmia sp!, {r4, lr}
|
||||||
bx lr
|
bx lr
|
||||||
|
.fnend
|
||||||
|
|
||||||
/* r0(old) r1(new) r2(addr) -> r0(zero_if_succeeded) */
|
/* r0(old) r1(new) r2(addr) -> r0(zero_if_succeeded) */
|
||||||
__atomic_cmpxchg:
|
__atomic_cmpxchg:
|
||||||
|
.fnstart
|
||||||
|
.save {r4, lr}
|
||||||
stmdb sp!, {r4, lr}
|
stmdb sp!, {r4, lr}
|
||||||
mov r4, r0 /* r4 = save oldvalue */
|
mov r4, r0 /* r4 = save oldvalue */
|
||||||
1: @ atomic_cmpxchg
|
1: @ atomic_cmpxchg
|
||||||
@ -84,6 +92,7 @@ __atomic_cmpxchg:
|
|||||||
2: @ atomic_cmpxchg
|
2: @ atomic_cmpxchg
|
||||||
ldmia sp!, {r4, lr}
|
ldmia sp!, {r4, lr}
|
||||||
bx lr
|
bx lr
|
||||||
|
.fnend
|
||||||
#else
|
#else
|
||||||
#define KUSER_CMPXCHG 0xffffffc0
|
#define KUSER_CMPXCHG 0xffffffc0
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
memcmp:
|
memcmp:
|
||||||
|
.fnstart
|
||||||
PLD (r0, #0)
|
PLD (r0, #0)
|
||||||
PLD (r1, #0)
|
PLD (r1, #0)
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ memcmp:
|
|||||||
moveq r0, #0
|
moveq r0, #0
|
||||||
bxeq lr
|
bxeq lr
|
||||||
|
|
||||||
|
.save {r4, lr}
|
||||||
/* save registers */
|
/* save registers */
|
||||||
stmfd sp!, {r4, lr}
|
stmfd sp!, {r4, lr}
|
||||||
|
|
||||||
@ -174,6 +176,7 @@ memcmp:
|
|||||||
9: /* restore registers and return */
|
9: /* restore registers and return */
|
||||||
ldmfd sp!, {r4, lr}
|
ldmfd sp!, {r4, lr}
|
||||||
bx lr
|
bx lr
|
||||||
|
.fnend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
__memcmp16:
|
__memcmp16:
|
||||||
|
.fnstart
|
||||||
PLD (r0, #0)
|
PLD (r0, #0)
|
||||||
PLD (r1, #0)
|
PLD (r1, #0)
|
||||||
|
|
||||||
@ -79,6 +80,7 @@ __memcmp16:
|
|||||||
bx lr
|
bx lr
|
||||||
|
|
||||||
|
|
||||||
|
.save {r4, lr}
|
||||||
/* save registers */
|
/* save registers */
|
||||||
0: stmfd sp!, {r4, lr}
|
0: stmfd sp!, {r4, lr}
|
||||||
|
|
||||||
@ -93,6 +95,7 @@ __memcmp16:
|
|||||||
/* restore registers and return */
|
/* restore registers and return */
|
||||||
ldmnefd sp!, {r4, lr}
|
ldmnefd sp!, {r4, lr}
|
||||||
bxne lr
|
bxne lr
|
||||||
|
.fnend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#define NEON_MAX_PREFETCH_DISTANCE 320
|
#define NEON_MAX_PREFETCH_DISTANCE 320
|
||||||
|
|
||||||
memcpy:
|
memcpy:
|
||||||
|
.fnstart
|
||||||
mov ip, r0
|
mov ip, r0
|
||||||
cmp r2, #16
|
cmp r2, #16
|
||||||
blt 4f @ Have less than 16 bytes to copy
|
blt 4f @ Have less than 16 bytes to copy
|
||||||
@ -128,6 +129,7 @@ memcpy:
|
|||||||
ldrmib r3, [r1], #1
|
ldrmib r3, [r1], #1
|
||||||
strmib r3, [ip], #1
|
strmib r3, [ip], #1
|
||||||
bx lr
|
bx lr
|
||||||
|
.fnend
|
||||||
|
|
||||||
#else /* __ARM_ARCH__ < 7 */
|
#else /* __ARM_ARCH__ < 7 */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user