# __clone(func, stack, flags, arg, ptid, tls, ctid) # a0, a1, a2, a3, a4, a5, a6 # syscall(SYS_clone, flags, stack, ptid, tls, ctid) # a7 a0, a1, a2, a3, a4 .global __clone .type __clone, %function __clone: # Save func and arg to stack addi a1, a1, -16 sd a0, 0(a1) sd a3, 8(a1) # Call SYS_clone mv a0, a2 mv a2, a4 mv a3, a5 mv a4, a6 li a7, 220 # SYS_clone ecall beqz a0, 1f # Parent ret # Child 1: ld a1, 0(sp) ld a0, 8(sp) jalr a1 # Exit li a7, 93 # SYS_exit ecall