提交 d86a32bb 编写于 作者: J Jyun-Yan You

fix mips stack alignment

上级 6c0a4693
......@@ -183,7 +183,9 @@ fn new_regs() -> ~Registers { ~([0, .. 32]) }
#[cfg(target_arch = "mips")]
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 mips o32 is 8-byte aligned
let sp = mut_offset(sp, -2);
// The final return address. 0 indicates the bottom of the stack
unsafe { *sp = 0; }
......
......@@ -34,9 +34,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 mips o32 is 8-byte aligned
sp -= 2;
*sp = 0;
regs.data[4] = (uint32_t)arg;
regs.data[29] = (uint32_t)sp;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册