| #include <sys/linux-syscalls.h> | |
| #ifndef __NR_vfork | |
| #define __NR_vfork 190 | |
| #endif | |
| .text | |
| .type vfork, @function | |
| .globl vfork | |
| .align 4 | |
| /* Get rid of the stack modifications (popl/ret) after vfork() success. | |
| * vfork is VERY sneaky. One has to be very careful about what can be done | |
| * between a successful vfork and a a subsequent execve() | |
| */ | |
| vfork: | |
| /* grab the return address */ | |
| popl %ecx | |
| movl $__NR_vfork, %eax | |
| int $0x80 | |
| cmpl $-129, %eax | |
| jb 1f | |
| negl %eax | |
| pushl %eax | |
| call __set_errno | |
| orl $-1, %eax | |
| 1: | |
| jmp *%ecx |