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:
andrew 2014-01-24 20:51:56 +00:00
parent 145b8688cb
commit 2370ce3666

View File

@ -216,8 +216,13 @@
ldmia sp, {sp, lr, pc}^ /* Restore lr and exit */
#endif
#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 \
.pad #(4); /* Skip stack alignment */ \
.save {r13-r15}; /* Restore sp, lr, pc */ \
.pad #(2*4); /* Skip user sp and lr */ \
.save {r0-r12}; /* Restore r0-r12 */ \