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 | |
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')
-rw-r--r-- | sys/amd64/amd64/trap.c | 19 | ||||
-rw-r--r-- | sys/i386/i386/trap.c | 19 | ||||
-rw-r--r-- | sys/kern/imgact_aout.c | 5 | ||||
-rw-r--r-- | sys/kern/init_main.c | 6 | ||||
-rw-r--r-- | sys/kern/init_sysent.c | 13 | ||||
-rw-r--r-- | sys/kern/kern_exit.c | 28 | ||||
-rw-r--r-- | sys/kern/makesyscalls.sh | 8 | ||||
-rw-r--r-- | sys/kern/subr_trap.c | 19 |
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))) { |