123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #include <features.h>
- #define _ERRNO_H
- #include <bits/errno.h>
- #include <asm/unistd.h>
- #define _SIGNAL_H
- #include <bits/signum.h>
- #define CLONE_VM 0x00000100 /* set if VM shared between processes */
- #define CLONE_VFORK 0x00004000 /* set if the parent wants the child to */
- .text
- .global __vfork
- .hidden __vfork
- .type __vfork,%function
- .align 4
- __vfork:
- mvi r2, 0
- mvi r3, CLONE_VFORK | CLONE_VM | SIGCHLD
- mvi r8, __NR_clone
- scall
- mvi r2, -4096
- bgeu r2, r1, 1f
- 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
- addi sp, sp, 8
- mvi r1, -1
- 1:
- ret
- .size __vfork,.-__vfork
- weak_alias(__vfork,vfork)
- libc_hidden_weak(vfork)
|