123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #include "ppc_asm.h"
- #define _ERRNO_H 1
- #include <bits/errno.h>
- #include <sys/syscall.h>
- #ifdef __NR_clone
- .globl __clone
- .type __clone, @function
- .align 2
- __clone:
-
- cmpwi cr0,r4,0
- cmpwi cr1,r3,0
- cror cr0*4+eq,cr1*4+eq,cr0*4+eq
- beq- cr0,.Lbadargs
-
- stwu r1,-32(r1)
- stmw r29,16(r1)
-
-
- clrrwi r4,r4,4
- li r0,0
- stwu r0,-16(r4)
-
- mr r29,r3
- mr r30,r4
- mr r31,r6
-
- mr r3,r5
-
- li 0, __NR_clone
- sc
-
- cmpwi cr1,r3,0
- crandc cr1*4+eq,cr1*4+eq,cr0*4+so
- bne- cr1,.Lparent
-
- mr r1,r30
-
- mtctr r29
- mr r3,r31
- bctrl
-
- #ifdef __PIC__
- b _exit@plt
- #else
- b _exit
- #endif
- .Lparent:
-
- lmw r29,16(r1)
- addi r1,r1,32
- bnslr+
- #ifdef __PIC__
- b __syscall_error@plt
- #else
- b __syscall_error
- #endif
- .Lbadargs:
- li r3,EINVAL
- #ifdef __PIC__
- b __syscall_error@plt
- #else
- b __syscall_error
- #endif
- .size __clone,.-__clone
- .weak clone
- clone=__clone
- #endif
|