blob: 53910aba3714055c5ea3dbc920616d4072dcf3b3 [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001#include <sys/linux-syscalls.h>
2
3#ifndef __NR_vfork
4#define __NR_vfork 190
5#endif
6
7
8 .text
9 .type vfork, @function
10 .globl vfork
11 .align 4
12
13/* Get rid of the stack modifications (popl/ret) after vfork() success.
14 * vfork is VERY sneaky. One has to be very careful about what can be done
15 * between a successful vfork and a a subsequent execve()
16 */
17
18vfork:
19 /* grab the return address */
20 popl %ecx
21 movl $__NR_vfork, %eax
22 int $0x80
23 cmpl $-129, %eax
24 jb 1f
25 negl %eax
26 pushl %eax
27 call __set_errno
28 orl $-1, %eax
291:
30 jmp *%ecx