blob: f8ad8451e86674c3c2bc738f67835cf572f88cff [file] [log] [blame]
Bobby Bingham3a3c8132013-10-05 05:13:18 -05001.text
2.global __clone
3.type __clone, @function
4__clone:
5! incoming: fn stack flags arg ptid tls ctid
6! r4 r5 r6 r7 @r15 @(4,r15) @(8,r15)
7
8 mov #-16, r0
9 and r0, r5
10
11 mov r4, r1 ! r1 = fn
12 mov r7, r2 ! r2 = arg
13
14 mov #120, r3 ! r3 = __NR_clone
15 mov r6, r4 ! r4 = flags
16 !mov r5, r5 ! r5 = stack
17 mov.l @r15, r6 ! r6 = ptid
18 mov.l @(8,r15), r7 ! r7 = ctid
19 mov.l @(4,r15), r0 ! r0 = tls
Rich Felker10d02682015-06-16 15:25:02 +000020 trapa #31
Bobby Bingham3a3c8132013-10-05 05:13:18 -050021
22 or r0, r0
23 or r0, r0
24 or r0, r0
25 or r0, r0
26 or r0, r0
27
28 cmp/eq #0, r0
29 bt 1f
30
31 ! we are the parent, return
32 rts
33 nop
34
351: ! we are the child, call fn(arg)
36 jsr @r1
37 mov r2, r4
38
39 mov #1, r3 ! __NR_exit
40 mov r0, r4
Rich Felker10d02682015-06-16 15:25:02 +000041 trapa #31
Bobby Bingham3a3c8132013-10-05 05:13:18 -050042
43 or r0, r0
44 or r0, r0
45 or r0, r0
46 or r0, r0
47 or r0, r0