diff --git a/musl_src.gni b/musl_src.gni index 193bd9216c52a07b24a0b56afcef76ab52b7f85e..e40299276af4bfbc2e7b5c1ae74d896e990fa7f8 100644 --- a/musl_src.gni +++ b/musl_src.gni @@ -1838,4 +1838,6 @@ musl_src_porting_file = [ "src/multibyte/wcsnrtombs.c", "src/network/inet_legacy.c", "src/passwd/getspnam_r.c", + "src/thread/arm/clone.s", + "src/thread/arm/syscall_cp.s", ] diff --git a/porting/linux/user/src/thread/arm/clone.s b/porting/linux/user/src/thread/arm/clone.s new file mode 100644 index 0000000000000000000000000000000000000000..2070dd51bd270e4cacfa7ae1cbe15e6ce5590504 --- /dev/null +++ b/porting/linux/user/src/thread/arm/clone.s @@ -0,0 +1,36 @@ +.syntax unified +.text +.global __clone +.hidden __clone +.type __clone,%function +.cfi_startproc +__clone: + stmfd sp!,{r4,r5,r6,r7} + .cfi_def_cfa_offset 16 + .cfi_rel_offset r4, 0 + .cfi_rel_offset r5, 4 + .cfi_rel_offset r6, 8 + .cfi_rel_offset r7, 12 + 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} + .cfi_def_cfa_offset 0 + bx lr + +1: mov r0,r6 + bl 3f +2: mov r7,#1 + svc 0 + b 2b + +3: bx r5 +.cfi_endproc \ No newline at end of file