fix arm stack alignment

This commit is contained in:
Jyun-Yan You 2013-05-22 02:14:22 +08:00 committed by Jyun-Yan You
parent 15e44381af
commit 499b02213d
2 changed files with 7 additions and 3 deletions

View file

@ -165,7 +165,9 @@ fn new_regs() -> ~Registers { ~([0, .. 32]) }
#[cfg(target_arch = "arm")]
fn initialize_call_frame(regs: &mut Registers, fptr: *c_void, arg: *c_void, sp: *mut uint) {
let sp = mut_offset(sp, -1);
let sp = align_down(sp);
// sp of arm eabi is 8-byte aligned
let sp = mut_offset(sp, -2);
// The final return address. 0 indicates the bottom of the stack
unsafe { *sp = 0; }

View file

@ -26,9 +26,11 @@ void context::call(void *f, void *arg, void *stack)
// set up the stack
uint32_t *sp = ( uint32_t *)stack;
//sp = align_down(sp);
sp = align_down(sp);
// The final return address. 0 indicates the bottom of the stack
*--sp = 0;
// sp of arm eabi is 8-byte aligned
sp -= 2;
*sp = 0;
regs.data[0] = ( uint32_t )arg; // r0
regs.data[13] = ( uint32_t )sp; //#52 sp, r13