| /* 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 |
| .hidden __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 |