summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/trap.c19
-rw-r--r--sys/i386/i386/trap.c19
-rw-r--r--sys/kern/imgact_aout.c5
-rw-r--r--sys/kern/init_main.c6
-rw-r--r--sys/kern/init_sysent.c13
-rw-r--r--sys/kern/kern_exit.c28
-rw-r--r--sys/kern/makesyscalls.sh8
-rw-r--r--sys/kern/subr_trap.c19
8 files changed, 69 insertions, 48 deletions
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 58c0090..dc62dc9 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
- * $Id: trap.c,v 1.28 1994/08/10 04:39:47 wollman Exp $
+ * $Id: trap.c,v 1.29 1994/08/18 22:34:43 wollman Exp $
*/
/*
@@ -44,12 +44,12 @@
#include <sys/param.h>
#include <sys/systm.h>
-
#include <sys/proc.h>
#include <sys/user.h>
#include <sys/acct.h>
#include <sys/kernel.h>
#include <sys/syscall.h>
+#include <sys/sysent.h>
#ifdef KTRACE
#include <sys/ktrace.h>
#endif
@@ -63,7 +63,6 @@
#include <machine/psl.h>
#include <machine/reg.h>
#include <machine/eflags.h>
-
#include <machine/trap.h>
#include "isa.h"
@@ -73,9 +72,6 @@
int trap_pfault __P((struct trapframe *, int));
void trap_fatal __P((struct trapframe *));
-struct sysent sysent[];
-int nsysent;
-
#define MAX_TRAP_MSG 27
char *trap_msg[] = {
"reserved addressing fault", /* 0 T_RESADFLT */
@@ -632,10 +628,13 @@ syscall(frame)
params += sizeof(quad_t);
}
- if (code >= nsysent)
- callp = &sysent[0];
- else
- callp = &sysent[code];
+ if (p->p_sysent->sv_mask)
+ code = code & p->p_sysent->sv_mask;
+
+ if (code < 0 || code >= p->p_sysent->sv_size)
+ callp = &p->p_sysent->sv_table[0];
+ else
+ callp = &p->p_sysent->sv_table[code];
if ((i = callp->sy_narg * sizeof (int)) &&
(error = copyin(params, (caddr_t)args, (u_int)i))) {
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index 58c0090..dc62dc9 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
- * $Id: trap.c,v 1.28 1994/08/10 04:39:47 wollman Exp $
+ * $Id: trap.c,v 1.29 1994/08/18 22:34:43 wollman Exp $
*/
/*
@@ -44,12 +44,12 @@
#include <sys/param.h>
#include <sys/systm.h>
-
#include <sys/proc.h>
#include <sys/user.h>
#include <sys/acct.h>
#include <sys/kernel.h>
#include <sys/syscall.h>
+#include <sys/sysent.h>
#ifdef KTRACE
#include <sys/ktrace.h>
#endif
@@ -63,7 +63,6 @@
#include <machine/psl.h>
#include <machine/reg.h>
#include <machine/eflags.h>
-
#include <machine/trap.h>
#include "isa.h"
@@ -73,9 +72,6 @@
int trap_pfault __P((struct trapframe *, int));
void trap_fatal __P((struct trapframe *));
-struct sysent sysent[];
-int nsysent;
-
#define MAX_TRAP_MSG 27
char *trap_msg[] = {
"reserved addressing fault", /* 0 T_RESADFLT */
@@ -632,10 +628,13 @@ syscall(frame)
params += sizeof(quad_t);
}
- if (code >= nsysent)
- callp = &sysent[0];
- else
- callp = &sysent[code];
+ if (p->p_sysent->sv_mask)
+ code = code & p->p_sysent->sv_mask;
+
+ if (code < 0 || code >= p->p_sysent->sv_size)
+ callp = &p->p_sysent->sv_table[0];
+ else
+ callp = &p->p_sysent->sv_table[code];
if ((i = callp->sy_narg * sizeof (int)) &&
(error = copyin(params, (caddr_t)args, (u_int)i))) {
diff --git a/sys/kern/imgact_aout.c b/sys/kern/imgact_aout.c
index 31705a2..fcd7af5 100644
--- a/sys/kern/imgact_aout.c
+++ b/sys/kern/imgact_aout.c
@@ -28,7 +28,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: imgact_aout.c,v 1.5 1994/05/25 09:02:00 rgrimes Exp $
+ * $Id: imgact_aout.c,v 1.6 1994/08/18 22:34:55 wollman Exp $
*/
#include <sys/param.h>
@@ -38,6 +38,7 @@
#include <sys/mman.h>
#include <sys/imgact.h>
#include <sys/kernel.h>
+#include <sys/sysent.h>
#include <vm/vm.h>
@@ -50,6 +51,7 @@ exec_aout_imgact(iparams)
unsigned long vmaddr, virtual_offset, file_offset;
unsigned long bss_size;
int error, len;
+ extern struct sysentvec aout_sysvec;
/*
* Set file/virtual offset based on a.out variant.
@@ -177,6 +179,7 @@ exec_aout_imgact(iparams)
iparams->interpreted = 0;
iparams->entry_addr = a_out->a_entry;
+ iparams->proc->p_sysent = &aout_sysvec;
return (0);
}
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 5089576..4c33667 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)init_main.c 8.9 (Berkeley) 1/21/94
- * $Id: init_main.c,v 1.4 1994/08/02 07:41:49 davidg Exp $
+ * $Id: init_main.c,v 1.5 1994/08/18 22:34:57 wollman Exp $
*/
#include <sys/param.h>
@@ -51,6 +51,7 @@
#include <sys/signalvar.h>
#include <sys/systm.h>
#include <sys/vnode.h>
+#include <sys/sysent.h>
#include <sys/conf.h>
#include <sys/buf.h>
#include <sys/clist.h>
@@ -126,6 +127,7 @@ main(framep)
extern struct pdevinit pdevinit[];
extern void roundrobin __P((void *));
extern void schedcpu __P((void *));
+ extern struct sysentvec aout_sysvec;
/*
* Initialize the current process pointer (curproc) before
@@ -156,6 +158,8 @@ main(framep)
session0.s_count = 1;
session0.s_leader = p;
+ p->p_sysent = &aout_sysvec;
+
p->p_flag = P_INMEM | P_SYSTEM;
p->p_stat = SRUN;
p->p_nice = NZERO;
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c
index 53886e2..f33eab2 100644
--- a/sys/kern/init_sysent.c
+++ b/sys/kern/init_sysent.c
@@ -2,13 +2,12 @@
* System call switch table.
*
* DO NOT EDIT-- this file is automatically generated.
- * created from $Id: syscalls.master,v 1.3 1994/08/02 07:42:44 davidg Exp $
+ * created from $Id: init_sysent.c,v 1.3 1994/08/19 11:45:19 davidg Exp $
*/
#include <sys/param.h>
#include <sys/systm.h>
-
-int nosys();
+#include <sys/sysent.h>
int nosys();
int exit();
@@ -519,4 +518,10 @@ struct sysent sysent[] = {
#endif
};
-int nsysent = sizeof(sysent) / sizeof(sysent[0]);
+struct sysentvec aout_sysvec = {
+ sizeof (sysent) / sizeof (sysent[0]),
+ sysent,
+ 0,
+ 0,
+ 0
+};
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
diff --git a/sys/kern/makesyscalls.sh b/sys/kern/makesyscalls.sh
index fcd0584..51fd760 100644
--- a/sys/kern/makesyscalls.sh
+++ b/sys/kern/makesyscalls.sh
@@ -1,6 +1,6 @@
#! /bin/sh -
# @(#)makesyscalls.sh 8.1 (Berkeley) 6/10/93
-# $Id: makesyscalls.sh,v 1.2 1994/08/02 07:42:24 davidg Exp $
+# $Id: makesyscalls.sh,v 1.3 1994/08/19 11:45:21 davidg Exp $
set -e
@@ -163,8 +163,10 @@ awk < $1 "
printf("#endif /* %s */\n\n", compat) > syscompat
printf("};\n\n") > sysent
- printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent
-
+ printf ("struct sysentvec aout_sysvec = {\n") > sysent
+ printf ("\tsizeof (sysent) / sizeof (sysent[0]),\n") > sysent
+ printf ("\tsysent,\n") > sysent
+ printf ("\t0,\n\t0,\n\t0\n};") > sysent
printf("};\n") > sysnames
} '
diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c
index 58c0090..dc62dc9 100644
--- a/sys/kern/subr_trap.c
+++ b/sys/kern/subr_trap.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
- * $Id: trap.c,v 1.28 1994/08/10 04:39:47 wollman Exp $
+ * $Id: trap.c,v 1.29 1994/08/18 22:34:43 wollman Exp $
*/
/*
@@ -44,12 +44,12 @@
#include <sys/param.h>
#include <sys/systm.h>
-
#include <sys/proc.h>
#include <sys/user.h>
#include <sys/acct.h>
#include <sys/kernel.h>
#include <sys/syscall.h>
+#include <sys/sysent.h>
#ifdef KTRACE
#include <sys/ktrace.h>
#endif
@@ -63,7 +63,6 @@
#include <machine/psl.h>
#include <machine/reg.h>
#include <machine/eflags.h>
-
#include <machine/trap.h>
#include "isa.h"
@@ -73,9 +72,6 @@
int trap_pfault __P((struct trapframe *, int));
void trap_fatal __P((struct trapframe *));
-struct sysent sysent[];
-int nsysent;
-
#define MAX_TRAP_MSG 27
char *trap_msg[] = {
"reserved addressing fault", /* 0 T_RESADFLT */
@@ -632,10 +628,13 @@ syscall(frame)
params += sizeof(quad_t);
}
- if (code >= nsysent)
- callp = &sysent[0];
- else
- callp = &sysent[code];
+ if (p->p_sysent->sv_mask)
+ code = code & p->p_sysent->sv_mask;
+
+ if (code < 0 || code >= p->p_sysent->sv_size)
+ callp = &p->p_sysent->sv_table[0];
+ else
+ callp = &p->p_sysent->sv_table[code];
if ((i = callp->sy_narg * sizeof (int)) &&
(error = copyin(params, (caddr_t)args, (u_int)i))) {
OpenPOWER on IntegriCloud