diff options
author | sos <sos@FreeBSD.org> | 1994-08-24 11:52:21 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 1994-08-24 11:52:21 +0000 |
commit | ecc424b57bcdf651d67766c458bc8c3e1bcde1f7 (patch) | |
tree | d44c9b6cf2bf87e21fea043e3f7e37e7b55833e1 /sys/kern/kern_exit.c | |
parent | 905367d1b840c512e15cb6243dbc3c4b14370cfc (diff) | |
download | FreeBSD-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.c | 28 |
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 |