xref: /aosp_15_r20/external/musl/src/thread/riscv32/clone.s (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
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	sw a0, 0(a1)
13	sw a3, 4(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
281:      lw a1, 0(sp)
29	lw a0, 4(sp)
30	jalr a1
31
32	# Exit
33	li a7, 93 # SYS_exit
34	ecall
35