12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #include <features.h>
- #include <sys/syscall.h>
- #define _ERRNO_H 1
- #include <bits/errno.h>
- #ifdef __NR_clone
- .text
- .global clone
- .type clone,@function
- .align 4
- clone:
- be r1, r0, 2f
- be r2, r0, 2f
- mvi r8, __NR_clone
- scall
- mvi r3, -4095
- bgeu r1, r3, 1f
- be r1, r0, __thread_start
- ret
- __thread_start:
- mvi fp, 0
- call r2
- calli HIDDEN_JUMPTARGET(_exit)
- /* Stop the unstoppable. */
- 9:
- bi 9b
- 2:
- mvi r1, -EINVAL
- 1:
- addi sp, sp, -8
- sw (sp+4), ra
- sw (sp+8), r1
- calli __errno_location
- lw r2, (sp+8)
- lw ra, (sp+4)
- sub r2, r0, r2
- sw (r1+0), r2
- mvi r1, -1
- addi sp, sp, 8
- ret
- #endif /* __NR_clone */
|