2019-06-26 16:41:07 +00:00
|
|
|
# NOTE: Keep this consistent with `alternative_stack.rs`.
|
|
|
|
|
2019-06-26 12:44:51 +00:00
|
|
|
.globl run_on_alternative_stack
|
|
|
|
run_on_alternative_stack:
|
2019-06-25 12:01:56 +00:00
|
|
|
# (stack_end, stack_begin)
|
|
|
|
# We need to ensure 16-byte alignment here.
|
|
|
|
pushq %r15
|
|
|
|
pushq %r14
|
|
|
|
pushq %r13
|
|
|
|
pushq %r12
|
|
|
|
pushq %rbx
|
|
|
|
pushq %rbp
|
|
|
|
movq %rsp, -16(%rdi)
|
|
|
|
|
2019-06-26 12:44:51 +00:00
|
|
|
leaq run_on_alternative_stack.returning(%rip), %rax
|
2019-06-25 12:01:56 +00:00
|
|
|
movq %rax, -24(%rdi)
|
|
|
|
|
|
|
|
movq %rsi, %rsp
|
|
|
|
popq %rbp
|
|
|
|
popq %rbx
|
|
|
|
popq %r12
|
|
|
|
popq %r13
|
|
|
|
popq %r14
|
|
|
|
popq %r15
|
|
|
|
retq
|
|
|
|
|
2019-06-26 12:44:51 +00:00
|
|
|
run_on_alternative_stack.returning:
|
2019-06-25 12:01:56 +00:00
|
|
|
movq (%rsp), %rsp
|
|
|
|
popq %rbp
|
|
|
|
popq %rbx
|
|
|
|
popq %r12
|
|
|
|
popq %r13
|
|
|
|
popq %r14
|
|
|
|
popq %r15
|
|
|
|
retq
|