rt: Save and restore %rax/%eax in __morestack

This doesn't matter now since we use an out pointer for return
values but it's sure to show up mysteriously someday.
This commit is contained in:
Brian Anderson 2011-12-19 16:16:00 -08:00
parent c3569abb8c
commit 1bfc4e2e6c
2 changed files with 9 additions and 3 deletions

View file

@ -198,11 +198,17 @@ MORESTACK:
// Realign stack - remember that __morestack was called misaligned
subl $12, %esp
// Save the return value of the function we allocated space for
movl %eax, (%esp)
// Now that we're on the return path we want to avoid
// stomping on %eax. FIXME: Need to save and restore %eax to
// actually preserve it across the call to delete the stack
call UPCALL_DEL_STACK
// And restore it
movl (%esp), %eax
addl $12,%esp
popl %ebp

View file

@ -100,8 +100,8 @@ MORESTACK:
// Switch back to the rust stack
movq %rbp, %rsp
// Align the stack again
pushq $0
// Save the return value
pushq %rax
// FIXME: Should preserve %rax here
#ifdef __APPLE__
@ -111,7 +111,7 @@ MORESTACK:
call UPCALL_DEL_STACK@PLT
#endif
addq $8, %rsp
popq %rax // Restore the return value
popq %rbp
// FIXME: I don't think these rules are necessary
// since the unwinder should never encounter an instruction