summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_exit.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>1994-08-24 11:52:21 +0000
committersos <sos@FreeBSD.org>1994-08-24 11:52:21 +0000
commitecc424b57bcdf651d67766c458bc8c3e1bcde1f7 (patch)
treed44c9b6cf2bf87e21fea043e3f7e37e7b55833e1 /sys/kern/kern_exit.c
parent905367d1b840c512e15cb6243dbc3c4b14370cfc (diff)
downloadFreeBSD-src-ecc424b57bcdf651d67766c458bc8c3e1bcde1f7.zip
FreeBSD-src-ecc424b57bcdf651d67766c458bc8c3e1bcde1f7.tar.gz
Changes preparing for iBCS support
Reviewed by: Submitted by:
Diffstat (limited to 'sys/kern/kern_exit.c')
-rw-r--r--sys/kern/kern_exit.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index b93a656..75076d7 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -1,4 +1,4 @@
-/*
+/*-
* Copyright (c) 1982, 1986, 1989, 1991, 1993
* The Regents of the University of California. All rights reserved.
* (c) UNIX System Laboratories, Inc.
@@ -36,11 +36,12 @@
* SUCH DAMAGE.
*
* @(#)kern_exit.c 8.7 (Berkeley) 2/12/94
- * $Id: kern_exit.c,v 1.3 1994/08/02 07:41:59 davidg Exp $
+ * $Id: kern_exit.c,v 1.4 1994/08/06 07:15:03 davidg Exp $
*/
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/sysent.h>
#include <sys/map.h>
#include <sys/ioctl.h>
#include <sys/proc.h>
@@ -282,12 +283,12 @@ struct wait_args {
int *status;
int options;
struct rusage *rusage;
-#ifdef COMPAT_43
+#if defined(COMPAT_43) || defined(IBCS2)
int compat; /* pseudo */
#endif
};
-#ifdef COMPAT_43
+#if defined(COMPAT_43) || defined(IBCS2)
#if defined(hp300) || defined(luna68k)
#include <machine/frame.h>
#define GETPS(rp) ((struct frame *)(rp))->f_sr
@@ -342,7 +343,7 @@ wait1(q, uap, retval)
{
register int nfound;
register struct proc *p, *t;
- int status, error;
+ int status, error, sig;
if (uap->pid == 0)
uap->pid = -q->p_pgid;
@@ -357,15 +358,24 @@ loop:
p->p_pid != uap->pid && p->p_pgid != -uap->pid)
continue;
nfound++;
+#if defined(COMPAT_43) || defined(IBCS2)
+ if (q->p_sysent->sv_sigtbl) {
+ if (p->p_xstat > q->p_sysent->sv_sigsize)
+ sig = q->p_sysent->sv_sigsize + 1;
+ else
+ sig = q->p_sysent->sv_sigtbl[p->p_xstat];
+ } else
+ sig = p->p_xstat;
+#endif
if (p->p_stat == SZOMB) {
/* charge childs scheduling cpu usage to parent */
if( curproc->p_pid != 1)
curproc->p_estcpu += p->p_estcpu;
retval[0] = p->p_pid;
-#ifdef COMPAT_43
+#if defined(COMPAT_43) || defined(IBCS2)
if (uap->compat)
- retval[1] = p->p_xstat;
+ retval[1] = sig;
else
#endif
if (uap->status) {
@@ -439,9 +449,9 @@ loop:
(p->p_flag & P_TRACED || uap->options & WUNTRACED)) {
p->p_flag |= P_WAITED;
retval[0] = p->p_pid;
-#ifdef COMPAT_43
+#if defined(COMPAT_43) || defined(IBCS2)
if (uap->compat) {
- retval[1] = W_STOPCODE(p->p_xstat);
+ retval[1] = W_STOPCODE(sig);
error = 0;
} else
#endif
OpenPOWER on IntegriCloud