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 Turner 2014-01-24 20:51:56 +00:00
parent 99984d229c
commit af3088290b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=261137

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 */ \