1// __clone(func, stack, flags, arg, ptid, tls, ctid)
2//         x0,   x1,    w2,    x3,  x4,   x5,  x6
3
4// syscall(SYS_clone, flags, stack, ptid, tls, ctid)
5//         x8,        x0,    x1,    x2,   x3,  x4
6
7.global __clone
8.hidden __clone
9.type   __clone,%function
10__clone:
11	// align stack and save func,arg
12	and x1,x1,#-16
13	stp x0,x3,[x1,#-16]!
14
15	// syscall
16	uxtw x0,w2
17	mov x2,x4
18	mov x3,x5
19	mov x4,x6
20	mov x8,#220 // SYS_clone
21	svc #0
22
23	cbz x0,1f
24	// parent
25	ret
26	// child
271:	ldp x1,x0,[sp],#16
28	blr x1
29	mov x8,#93 // SYS_exit
30	svc #0
31