summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>1999-08-27 14:47:23 +0000
committergallatin <gallatin@FreeBSD.org>1999-08-27 14:47:23 +0000
commitffd6399600ecf9973a8a8202ef1d2c969dfb7c42 (patch)
treef46f29d67777422e04729c58f93a593f434d024c
parenta1c1e7ab1acb9391452e3aa983d7bc436400b359 (diff)
downloadFreeBSD-src-ffd6399600ecf9973a8a8202ef1d2c969dfb7c42.zip
FreeBSD-src-ffd6399600ecf9973a8a8202ef1d2c969dfb7c42.tar.gz
Fix the child's return path from fork so that fork will return 0
in the child. This corrects a problem where linux/alpha binaries see the child's return value of fork as the parent's pid. This happens because linux/alpha binaries apparently check the return value directly, rather than looking for a non-zero value in a4, as *BSD & OSF/1 do. Reviewed by:dfr@nlsystems.com
-rw-r--r--sys/alpha/alpha/vm_machdep.c8
-rw-r--r--sys/powerpc/aim/vm_machdep.c8
-rw-r--r--sys/powerpc/powerpc/vm_machdep.c8
3 files changed, 12 insertions, 12 deletions
diff --git a/sys/alpha/alpha/vm_machdep.c b/sys/alpha/alpha/vm_machdep.c
index cff51a9..4f92cf6 100644
--- a/sys/alpha/alpha/vm_machdep.c
+++ b/sys/alpha/alpha/vm_machdep.c
@@ -38,7 +38,7 @@
*
* from: @(#)vm_machdep.c 7.3 (Berkeley) 5/13/91
* Utah $Hdr: vm_machdep.c 1.16.1.1 89/06/23$
- * $Id: vm_machdep.c,v 1.18 1999/07/22 06:03:42 alc Exp $
+ * $Id: vm_machdep.c,v 1.19 1999/08/05 23:38:13 jdp Exp $
*/
/*
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@@ -187,9 +187,9 @@ cpu_fork(p1, p2)
/*
* 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 */
+ p2tf->tf_regs[FRAME_V0] = 0; /* child's pid (linux) */
+ p2tf->tf_regs[FRAME_A3] = 0; /* no error */
+ p2tf->tf_regs[FRAME_A4] = 1; /* is child (FreeBSD) */
/*
* Arrange for continuation at child_return(), which
diff --git a/sys/powerpc/aim/vm_machdep.c b/sys/powerpc/aim/vm_machdep.c
index cff51a9..4f92cf6 100644
--- a/sys/powerpc/aim/vm_machdep.c
+++ b/sys/powerpc/aim/vm_machdep.c
@@ -38,7 +38,7 @@
*
* from: @(#)vm_machdep.c 7.3 (Berkeley) 5/13/91
* Utah $Hdr: vm_machdep.c 1.16.1.1 89/06/23$
- * $Id: vm_machdep.c,v 1.18 1999/07/22 06:03:42 alc Exp $
+ * $Id: vm_machdep.c,v 1.19 1999/08/05 23:38:13 jdp Exp $
*/
/*
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@@ -187,9 +187,9 @@ cpu_fork(p1, p2)
/*
* 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 */
+ p2tf->tf_regs[FRAME_V0] = 0; /* child's pid (linux) */
+ p2tf->tf_regs[FRAME_A3] = 0; /* no error */
+ p2tf->tf_regs[FRAME_A4] = 1; /* is child (FreeBSD) */
/*
* Arrange for continuation at child_return(), which
diff --git a/sys/powerpc/powerpc/vm_machdep.c b/sys/powerpc/powerpc/vm_machdep.c
index cff51a9..4f92cf6 100644
--- a/sys/powerpc/powerpc/vm_machdep.c
+++ b/sys/powerpc/powerpc/vm_machdep.c
@@ -38,7 +38,7 @@
*
* from: @(#)vm_machdep.c 7.3 (Berkeley) 5/13/91
* Utah $Hdr: vm_machdep.c 1.16.1.1 89/06/23$
- * $Id: vm_machdep.c,v 1.18 1999/07/22 06:03:42 alc Exp $
+ * $Id: vm_machdep.c,v 1.19 1999/08/05 23:38:13 jdp Exp $
*/
/*
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@@ -187,9 +187,9 @@ cpu_fork(p1, p2)
/*
* 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 */
+ p2tf->tf_regs[FRAME_V0] = 0; /* child's pid (linux) */
+ p2tf->tf_regs[FRAME_A3] = 0; /* no error */
+ p2tf->tf_regs[FRAME_A4] = 1; /* is child (FreeBSD) */
/*
* Arrange for continuation at child_return(), which
OpenPOWER on IntegriCloud