| #include <stdio.h> | 
 | #include <stdlib.h> | 
 | #include <unistd.h> | 
 | #include <error.h> | 
 | #include <errno.h> | 
 | #include <sys/wait.h> | 
 |  | 
 | void __attribute_noinline__ noop (void); | 
 |  | 
 | #define NR	2	/* Exit code of the child.  */ | 
 |  | 
 | int | 
 | main (void) | 
 | { | 
 |   pid_t pid; | 
 |   int status; | 
 |  | 
 |   printf ("Before vfork\n"); | 
 |   fflush (stdout); | 
 |   pid = vfork (); | 
 |   if (pid == 0) | 
 |     { | 
 |       /* This will clobber the return pc from vfork in the parent on | 
 | 	 machines where it is stored on the stack, if vfork wasn't | 
 | 	 implemented correctly, */ | 
 |       noop (); | 
 |       _exit (NR); | 
 |     } | 
 |   else if (pid < 0) | 
 |     error (1, errno, "vfork"); | 
 |   printf ("After vfork (parent)\n"); | 
 |   if (waitpid (0, &status, 0) != pid | 
 |       || !WIFEXITED (status) || WEXITSTATUS (status) != NR) | 
 |     exit (1); | 
 |  | 
 |   return 0; | 
 | } | 
 |  | 
 | void | 
 | noop (void) | 
 | { | 
 | } |