| Index: fusl/src/thread/arm/clone.s
|
| diff --git a/fusl/src/thread/arm/clone.s b/fusl/src/thread/arm/clone.s
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fe2e0e60ec4c9e5963fe55d5a940f4028f6c39da
|
| --- /dev/null
|
| +++ b/fusl/src/thread/arm/clone.s
|
| @@ -0,0 +1,31 @@
|
| +.syntax unified
|
| +.text
|
| +.global __clone
|
| +.type __clone,%function
|
| +__clone:
|
| + stmfd sp!,{r4,r5,r6,r7}
|
| + mov r7,#120
|
| + mov r6,r3
|
| + mov r5,r0
|
| + mov r0,r2
|
| + and r1,r1,#-16
|
| + ldr r2,[sp,#16]
|
| + ldr r3,[sp,#20]
|
| + ldr r4,[sp,#24]
|
| + svc 0
|
| + tst r0,r0
|
| + beq 1f
|
| + ldmfd sp!,{r4,r5,r6,r7}
|
| + bx lr
|
| +
|
| +1: mov r0,r6
|
| + tst r5,#1
|
| + bne 1f
|
| + mov lr,pc
|
| + mov pc,r5
|
| +2: mov r7,#1
|
| + svc 0
|
| +
|
| +1: mov lr,pc
|
| + bx r5
|
| + b 2b
|
|
|