1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <error.h> 5 #include <errno.h> 6 #include <sys/wait.h> 7 8 void __attribute_noinline__ noop (void); 9 10 #define NR 2 /* Exit code of the child. */ 11 12 int main(void)13main (void) 14 { 15 pid_t pid; 16 int status; 17 18 printf ("Before vfork\n"); 19 fflush (stdout); 20 pid = vfork (); 21 if (pid == 0) 22 { 23 /* This will clobber the return pc from vfork in the parent on 24 machines where it is stored on the stack, if vfork wasn't 25 implemented correctly, */ 26 noop (); 27 _exit (NR); 28 } 29 else if (pid < 0) 30 error (1, errno, "vfork"); 31 printf ("After vfork (parent)\n"); 32 if (waitpid (0, &status, 0) != pid 33 || !WIFEXITED (status) || WEXITSTATUS (status) != NR) 34 exit (1); 35 36 return 0; 37 } 38 39 void noop(void)40noop (void) 41 { 42 } 43