123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #include <features.h>
- #include <asm/unistd.h>
- #define _ERRNO_H 1
- #include <bits/errno.h>
- #if defined __HAVE_ELF__ && defined __HAVE_SHARED__
- #define PLTJMP(_x) _x##@PLT
- #else
- #define PLTJMP(_x) _x
- #endif
- .text
- .text
- .align 4
- .type __clone,@function
- .globl __clone;
- __clone:
-
- tst r4, r4
- bt 0f
- tst r5, r5
- bf/s 1f
- mov #+__NR_clone, r3
- 0:
- bra __syscall_error
- mov #-EINVAL, r4
- 1:
-
- mov.l r7, @-r5
-
- mov.l r4, @-r5
-
-
- mov r6, r4
- trapa #0x12
- mov r0, r1
- #ifdef __sh2__
- shar r1
- shar r1
- shar r1
- shar r1
- shar r1
- shar r1
- shar r1
- shar r1
- shar r1
- shar r1
- shar r1
- shar r1
- #else
- mov #-12, r2
- shad r2, r1
- #endif
- not r1, r1
- tst r1, r1
- bf/s 2f
- tst r0, r0
- bra __syscall_error
- mov r0, r4
- 2:
- bt 3f
- rts
- nop
- 3:
-
- mov.l @r15, r1
- jsr @r1
- mov.l @(4,r15), r4
-
- mov.l .L1, r1
- #if defined __HAVE_ELF__ && defined __HAVE_SHARED__
- mov.l r12, @-r15
- sts.l pr, @-r15
- mov r0, r4
- mova .LG, r0
- mov.l .LG, r12
- add r0, r12
- mova .L1, r0
- add r0, r1
- jsr @r1
- nop
- lds.l @r15+, pr
- rts
- mov.l @r15+, r12
- #else
- jmp @r1
- mov r0, r4
- #endif
- .align 2
- .L1:
- .long PLTJMP(_exit)
- .size __clone,.-__clone;
- .globl clone;
- clone = __clone
- #include "syscall_error.S"
|