diff options
| author | Doug Rabson <dfr@FreeBSD.org> | 2002-04-21 12:34:58 +0000 |
|---|---|---|
| committer | Doug Rabson <dfr@FreeBSD.org> | 2002-04-21 12:34:58 +0000 |
| commit | fb767b2d4e75738e87bedfc6f58b94586ae60ba5 (patch) | |
| tree | ef46a33bd75740efc86fbbe384bad55633ab31c0 /sys | |
| parent | bd41864183e2f9d31817b4458d2b6e0206c64b5b (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/ia64/ia64/vm_machdep.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/ia64/ia64/vm_machdep.c b/sys/ia64/ia64/vm_machdep.c index d5007dc5bfaf..d945ded6ab9a 100644 --- a/sys/ia64/ia64/vm_machdep.c +++ b/sys/ia64/ia64/vm_machdep.c @@ -94,6 +94,8 @@ #include <sys/user.h> +#include <i386/include/psl.h> + /* * quick version of vm_fault */ @@ -198,9 +200,15 @@ cpu_fork(td1, p2, td2, flags) * Set up return-value registers as fork() libc stub expects. */ p2tf = td2->td_frame; - p2tf->tf_r[FRAME_R8] = 0; /* child's pid (linux) */ - p2tf->tf_r[FRAME_R9] = 1; /* is child (FreeBSD) */ - p2tf->tf_r[FRAME_R10] = 0; /* no error */ + if (p2tf->tf_cr_ipsr & IA64_PSR_IS) { + p2tf->tf_r[FRAME_R8] = 0; /* child returns zero (eax) */ + p2tf->tf_r[FRAME_R10] = 1; /* is child (edx) */ + td2->td_pcb->pcb_eflag &= ~PSL_C; /* no error */ + } else { + p2tf->tf_r[FRAME_R8] = 0; /* child's pid (linux) */ + p2tf->tf_r[FRAME_R9] = 1; /* is child (FreeBSD) */ + p2tf->tf_r[FRAME_R10] = 0; /* no error */ + } /* * Turn off RSE for a moment and work out our current |
