platform_bionic/libc/arch-x86/bionic/vfork.S
2009-03-03 19:28:35 -08:00

30 lines
609 B
ArmAsm

#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