github.com/afumu/libc@v0.0.6/musl/src/thread/sh/clone.s (about) 1 .text 2 .global __clone 3 .hidden __clone 4 .type __clone, @function 5 __clone: 6 ! incoming: fn stack flags arg ptid tls ctid 7 ! r4 r5 r6 r7 @r15 @(4,r15) @(8,r15) 8 9 mov #-16, r0 10 and r0, r5 11 12 mov r4, r1 ! r1 = fn 13 mov r7, r2 ! r2 = arg 14 15 mov #120, r3 ! r3 = __NR_clone 16 mov r6, r4 ! r4 = flags 17 !mov r5, r5 ! r5 = stack 18 mov.l @r15, r6 ! r6 = ptid 19 mov.l @(8,r15), r7 ! r7 = ctid 20 mov.l @(4,r15), r0 ! r0 = tls 21 trapa #31 22 23 or r0, r0 24 or r0, r0 25 or r0, r0 26 or r0, r0 27 or r0, r0 28 29 cmp/eq #0, r0 30 bt 1f 31 32 ! we are the parent, return 33 rts 34 nop 35 36 1: ! we are the child, call fn(arg) 37 mov.l 1f, r0 38 mov r1, r5 39 bsrf r0 40 mov r2, r4 41 42 2: mov #1, r3 ! __NR_exit 43 mov r0, r4 44 trapa #31 45 46 or r0, r0 47 or r0, r0 48 or r0, r0 49 or r0, r0 50 or r0, r0 51 52 .align 2 53 .hidden __shcall 54 1: .long __shcall@PCREL+(.-2b)