| Index: fusl/src/thread/aarch64/clone.s
|
| diff --git a/fusl/src/thread/aarch64/clone.s b/fusl/src/thread/aarch64/clone.s
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..50af913ce696796216e9d6551f92c7ac3a82dd97
|
| --- /dev/null
|
| +++ b/fusl/src/thread/aarch64/clone.s
|
| @@ -0,0 +1,29 @@
|
| +// __clone(func, stack, flags, arg, ptid, tls, ctid)
|
| +// x0, x1, w2, x3, x4, x5, x6
|
| +
|
| +// syscall(SYS_clone, flags, stack, ptid, tls, ctid)
|
| +// x8, x0, x1, x2, x3, x4
|
| +
|
| +.global __clone
|
| +.type __clone,%function
|
| +__clone:
|
| + // align stack and save func,arg
|
| + and x1,x1,#-16
|
| + stp x0,x3,[x1,#-16]!
|
| +
|
| + // syscall
|
| + uxtw x0,w2
|
| + mov x2,x4
|
| + mov x3,x5
|
| + mov x4,x6
|
| + mov x8,#220 // SYS_clone
|
| + svc #0
|
| +
|
| + cbz x0,1f
|
| + // parent
|
| + ret
|
| + // child
|
| +1: ldp x1,x0,[sp],#16
|
| + blr x1
|
| + mov x8,#93 // SYS_exit
|
| + svc #0
|
|
|