Home | History | Annotate | Download | only in bionic
      1 #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 
     18 vfork:
     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
     29 1:
     30     jmp     *%ecx
     31