32 lines
390 B
ArmAsm
32 lines
390 B
ArmAsm
.global sys_fork_trampoline
|
|
sys_fork_trampoline:
|
|
pushq %rbx
|
|
pushq %rbp
|
|
pushq %r12
|
|
pushq %r13
|
|
pushq %r14
|
|
pushq %r15
|
|
|
|
call read_ip
|
|
testq %rax, %rax
|
|
je .reload_stack
|
|
|
|
movq %rax, %rsi
|
|
movq %rsp, %rdi
|
|
call sys_fork
|
|
|
|
.done:
|
|
popq %r15
|
|
popq %r14
|
|
popq %r13
|
|
popq %r12
|
|
popq %rbp
|
|
popq %rbx
|
|
ret
|
|
|
|
.reload_stack:
|
|
call get_thread_start_sp
|
|
movq %rax, %rsp
|
|
xorq %rax, %rax
|
|
jmp .done
|