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:
parent
c3569abb8c
commit
1bfc4e2e6c
2 changed files with 9 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue