Add UNWINDSVCFRAME to provide the unwind pseudo ops to allow us to unwind
past a trapframe. Use this macro in exception_exit as it is the function the unwinder enters as the functions that store the frame setting lr to point to it.
This commit is contained in:
parent
268a55bc98
commit
da01dd9e1e
@ -206,7 +206,7 @@ END(address_exception_entry)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
ASENTRY_NP(exception_exit)
|
ASENTRY_NP(exception_exit)
|
||||||
STOP_UNWINDING
|
UNWINDSVCFRAME
|
||||||
DO_AST
|
DO_AST
|
||||||
PULLFRAMEFROMSVCANDEXIT
|
PULLFRAMEFROMSVCANDEXIT
|
||||||
END(exception_exit)
|
END(exception_exit)
|
||||||
|
@ -207,6 +207,15 @@
|
|||||||
add sp, sp, #(4*15); /* Adjust the stack pointer */ \
|
add sp, sp, #(4*15); /* Adjust the stack pointer */ \
|
||||||
ldmia sp, {sp, lr, pc}^ /* Restore lr and exit */
|
ldmia sp, {sp, lr, pc}^ /* Restore lr and exit */
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__ARM_EABI__)
|
||||||
|
#define UNWINDSVCFRAME \
|
||||||
|
.save {r13-r15}; /* Restore sp, lr, pc */ \
|
||||||
|
.pad #(2*4); /* Skip user sp and lr */ \
|
||||||
|
.save {r0-r12}; /* Restore r0-r12 */ \
|
||||||
|
.pad #(4) /* Skip spsr */
|
||||||
|
#else
|
||||||
|
#define UNWINDSVCFRAME
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DATA(name) \
|
#define DATA(name) \
|
||||||
.data ; \
|
.data ; \
|
||||||
|
Loading…
Reference in New Issue
Block a user