OLD | NEW |
| (Empty) |
1 .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 | |
20 trapa #31 | |
21 | |
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 | |
35 1: ! we are the child, call fn(arg) | |
36 mov.l 1f, r0 | |
37 mov r1, r5 | |
38 bsrf r0 | |
39 mov r2, r4 | |
40 | |
41 2: mov #1, r3 ! __NR_exit | |
42 mov r0, r4 | |
43 trapa #31 | |
44 | |
45 or r0, r0 | |
46 or r0, r0 | |
47 or r0, r0 | |
48 or r0, r0 | |
49 or r0, r0 | |
50 | |
51 .align 2 | |
52 .hidden __shcall | |
53 1: .long __shcall@PCREL+(.-2b) | |
OLD | NEW |