Date: Thu, 26 Aug 1999 10:40:29 -0400 (EDT) From: Andrew Gallatin <gallatin@cs.duke.edu> To: freebsd-hackers@freebsd.org Subject: undocumented vfork behaviour? Message-ID: <14277.18939.326895.354112@grasshopper.cs.duke.edu>
next in thread | raw e-mail | index | archive | help
I'm working on getting linux/alpha compatability going in FreeBSD/alpha & I stumbled over some odd fork behaviour that I was hoping somebody could shed some light on. Specifically, when a linux/alpha process forks, the child's return value is the parent's pid rather than zero. I tracked this behaviour down to the child's code path in the alpha's cpu_fork(): /* * Set up return-value registers as fork() libc stub expects. */ p2tf->tf_regs[FRAME_V0] = p1->p_pid; /* parent's pid */ p2tf->tf_regs[FRAME_A3] = 0; /* no error */ p2tf->tf_regs[FRAME_A4] = 1; /* is child */ In the i386 & mips libc Ovfork stubs, I see comments which describe this behaviour: /* * pid = vfork(); * * %edx == 0 in parent process, %edx == 1 in child process. * %eax == pid of child in parent, %eax == pid of parent in child. * */ Is this comment purely historical? At least the i386 platform no longer seems to do this: If I run the following code on FreeBSD/i386, I see: parent's pid = 6730 I am the child, result = 0 I must be the parent, result = 6731 Whereas FreeBSD/alpha does this: parent's pid = 17721 I must be the parent, result = 17721 I must be the parent, result = 17722 Code: #include <sys/syscall.h> #include <unistd.h> main() { int result; printf("parent's pid = %d\n", getpid()); result = syscall(SYS_vfork); if(result == 0) printf("I am the child, result = %d\n", result); else printf("I must be the parent, result = %d\n", result); exit(); } Before I "fix it" to act like FreeBSD/i386 (I've already tried & it seems to work OK for FreeBSD & OSF1 binaries, and fixes my linux/alpha binary's problems), I'd like to make sure there aren't any hidden ramifications. Thanks, Drew ------------------------------------------------------------------------------ Andrew Gallatin, Sr Systems Programmer http://www.cs.duke.edu/~gallatin Duke University Email: gallatin@cs.duke.edu Department of Computer Science Phone: (919) 660-6590 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?14277.18939.326895.354112>