#include #define _ERRNO_H #include #include #define _SIGNAL_H #include #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)