Correct the alignment of sp through functions that use UNWINDSVCFRAME. We
were incorrectly adding the trap frame padding to the stack pointer after reading it's value and unaligning it.
This commit is contained in:
parent
99984d229c
commit
af3088290b
@ -216,8 +216,13 @@
|
|||||||
ldmia sp, {sp, lr, pc}^ /* Restore lr and exit */
|
ldmia sp, {sp, lr, pc}^ /* Restore lr and exit */
|
||||||
#endif
|
#endif
|
||||||
#if defined(__ARM_EABI__)
|
#if defined(__ARM_EABI__)
|
||||||
|
/*
|
||||||
|
* Unwind hints so we can unwind past functions that use
|
||||||
|
* PULLFRAMEFROMSVCANDEXIT. They are run in reverse order.
|
||||||
|
* As the last thing we do is restore the stack pointer
|
||||||
|
* we can ignore the padding at the end of struct trapframe.
|
||||||
|
*/
|
||||||
#define UNWINDSVCFRAME \
|
#define UNWINDSVCFRAME \
|
||||||
.pad #(4); /* Skip stack alignment */ \
|
|
||||||
.save {r13-r15}; /* Restore sp, lr, pc */ \
|
.save {r13-r15}; /* Restore sp, lr, pc */ \
|
||||||
.pad #(2*4); /* Skip user sp and lr */ \
|
.pad #(2*4); /* Skip user sp and lr */ \
|
||||||
.save {r0-r12}; /* Restore r0-r12 */ \
|
.save {r0-r12}; /* Restore r0-r12 */ \
|
||||||
|
Loading…
Reference in New Issue
Block a user