#[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; }
// 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