1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
/* int clone(fn, stack, flags, arg, ptid, tls, ctid)
* r3 r4 r5 r6 sp+0 sp+4 sp+8
* sys_clone(flags, stack, ptid, ctid, tls)
*/
.global __clone
.type __clone,@function
__clone:
l.addi r4, r4, -8
l.sw 0(r4), r3
l.sw 4(r4), r6
/* (fn, st, fl, ar, pt, tl, ct) => (fl, st, pt, ct, tl) */
l.ori r3, r5, 0
l.lwz r5, 0(r1)
l.lwz r6, 8(r1)
l.lwz r7, 4(r1)
l.ori r11, r0, 220 /* __NR_clone */
l.sys 1
l.sfeqi r11, 0
l.bf 1f
l.nop
l.jr r9
l.nop
1: l.lwz r11, 0(r1)
l.jalr r11
l.lwz r3, 4(r1)
l.ori r11, r0, 93 /* __NR_exit */
l.sys 1
|