github.com/afumu/libc@v0.0.6/musl/src/thread/riscv64/clone.s (about)

     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