elf.h: add ELFCOMPRESS_ZSTD
[musl] / src / thread / riscv64 / clone.s
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         # Save func and arg to stack
11         addi a1, a1, -16
12         sd a0, 0(a1)
13         sd a3, 8(a1)
14
15         # Call SYS_clone
16         mv a0, a2
17         mv a2, a4
18         mv a3, a5
19         mv a4, a6
20         li a7, 220 # SYS_clone
21         ecall
22
23         beqz a0, 1f
24         # Parent
25         ret
26
27         # Child
28 1:      ld a1, 0(sp)
29         ld a0, 8(sp)
30         jalr a1
31
32         # Exit
33         li a7, 93 # SYS_exit
34         ecall