master
1# __clone(func, stack, flags, arg, ptid, tls, ctid)
2# a0, a1, a2, a3, a4, a5, a6
3
4# syscall(SYS_clone, flags, stack, ptid, tls, ctid)
5# a7 a0, a1, a2, a3, a4
6
7.global __clone
8.type __clone, %function
9__clone:
10 andi a1, a1, -16
11
12 # Save func and arg to stack
13 addi a1, a1, -16
14 sd a0, 0(a1)
15 sd a3, 8(a1)
16
17 # Call SYS_clone
18 mv a0, a2
19 mv a2, a4
20 mv a3, a5
21 mv a4, a6
22 li a7, 220 # SYS_clone
23 ecall
24
25 beqz a0, 1f
26 # Parent
27 ret
28
29 # Child
301: ld a1, 0(sp)
31 ld a0, 8(sp)
32 jalr a1
33
34 # Exit
35 li a7, 93 # SYS_exit
36 ecall