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)
|
||||
STOP_UNWINDING
|
||||
UNWINDSVCFRAME
|
||||
DO_AST
|
||||
PULLFRAMEFROMSVCANDEXIT
|
||||
END(exception_exit)
|
||||
|
@ -206,7 +206,16 @@
|
||||
mov r0, r0; /* NOP for previous instruction */ \
|
||||
add sp, sp, #(4*15); /* Adjust the stack pointer */ \
|
||||
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) \
|
||||
.data ; \
|
||||
|
Loading…
Reference in New Issue
Block a user