update for new syscall args description mechanism

This commit is contained in:
cgd 1994-10-20 04:43:21 +00:00
parent 3c8b6feab0
commit 77e4fe47ef
4 changed files with 67 additions and 60 deletions

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
* $Id: machdep.c,v 1.122 1994/10/09 12:57:15 mycroft Exp $
* $Id: machdep.c,v 1.123 1994/10/20 04:43:21 cgd Exp $
*/
#include <sys/param.h>
@ -59,6 +59,7 @@
#include <sys/vnode.h>
#include <sys/device.h>
#include <sys/sysctl.h>
#include <sys/syscallargs.h>
#ifdef SYSVMSG
#include <sys/msg.h>
#endif
@ -597,14 +598,12 @@ check_selectors(u_short cs, u_short ss, u_short ds, u_short es)
* psl to gain improper privileges or to cause
* a machine fault.
*/
struct sigreturn_args {
struct sigcontext *scp;
};
sigreturn(p, uap, retval)
struct proc *p;
struct sigreturn_args *uap;
int *retval;
struct sigreturn_args /* {
syscallarg(struct sigcontext *) sigcntxp;
} */ *uap;
register_t *retval;
{
struct sigcontext *scp, context;
register struct sigframe *fp;
@ -618,7 +617,7 @@ sigreturn(p, uap, retval)
* It is unsafe to keep track of it ourselves, in the event that a
* program jumps out of a signal handler.
*/
scp = uap->scp;
scp = SCARG(uap, sigcntxp);
if (copyin((caddr_t)scp, &context, sizeof(*scp)) != 0)
return (EFAULT);
@ -864,7 +863,7 @@ setregs(p, entry, stack, retval)
struct proc *p;
u_long entry;
u_long stack;
int retval[2];
register_t *retval;
{
register struct trapframe *tf;

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)sys_machdep.c 5.5 (Berkeley) 1/19/91
* $Id: sys_machdep.c,v 1.10 1994/04/24 22:49:05 mycroft Exp $
* $Id: sys_machdep.c,v 1.11 1994/10/20 04:43:24 cgd Exp $
*/
#include <sys/param.h>
@ -51,6 +51,9 @@
#include <sys/trace.h>
#include <sys/signal.h>
#include <sys/mount.h>
#include <sys/syscallargs.h>
#include <vm/vm.h>
#include <vm/vm_kern.h>
@ -67,39 +70,40 @@ int nvualarm;
vtrace(p, uap, retval)
struct proc *p;
register struct args {
int request;
int value;
} *uap;
int *retval;
register struct vtrace_args /* {
syscallarg(int) request;
syscallarg(int) value;
} */ *uap;
register_t *retval;
{
int vdoualarm();
switch (uap->request) {
switch (SCARG(uap, request)) {
case VTR_DISABLE: /* disable a trace point */
case VTR_ENABLE: /* enable a trace point */
if (uap->value < 0 || uap->value >= TR_NFLAGS)
if (SCARG(uap, value) < 0 || SCARG(uap, value) >= TR_NFLAGS)
return (EINVAL);
*retval = traceflags[uap->value];
traceflags[uap->value] = uap->request;
*retval = traceflags[SCARG(uap, value)];
traceflags[SCARG(uap, value)] = SCARG(uap, request);
break;
case VTR_VALUE: /* return a trace point setting */
if (uap->value < 0 || uap->value >= TR_NFLAGS)
if (SCARG(uap, value) < 0 || SCARG(uap, value) >= TR_NFLAGS)
return (EINVAL);
*retval = traceflags[uap->value];
*retval = traceflags[SCARG(uap, value)];
break;
case VTR_UALARM: /* set a real-time ualarm, less than 1 min */
if (uap->value <= 0 || uap->value > 60 * hz || nvualarm > 5)
if (SCARG(uap, value) <= 0 || SCARG(uap, value) > 60 * hz ||
nvualarm > 5)
return (EINVAL);
nvualarm++;
timeout(vdoualarm, (caddr_t)p->p_pid, uap->value);
timeout(vdoualarm, (caddr_t)p->p_pid, SCARG(uap, value));
break;
case VTR_STAMP:
trace(TR_STAMP, uap->value, p->p_pid);
trace(TR_STAMP, SCARG(uap, value), p->p_pid);
break;
}
return (0);
@ -138,7 +142,7 @@ int
i386_get_ldt(p, args, retval)
struct proc *p;
char *args;
int *retval;
register_t *retval;
{
int error = 0;
struct pcb *pcb = &p->p_addr->u_pcb;
@ -152,29 +156,30 @@ i386_get_ldt(p, args, retval)
uap = &ua;
#ifdef DEBUG
printf("i386_get_ldt: start=%d num=%d descs=%x\n", uap->start, uap->num, uap->desc);
printf("i386_get_ldt: start=%d num=%d descs=%x\n", SCARG(uap, start),
SCARG(uap, num), SCARG(uap, desc));
#endif
if (uap->start < 0 || uap->num < 0)
if (SCARG(uap, start) < 0 || SCARG(uap, num) < 0)
return(EINVAL);
s = splhigh();
if (pcb->pcb_ldt) {
nldt = pcb->pcb_ldt_len;
num = min(uap->num, nldt);
lp = &((union descriptor *)(pcb->pcb_ldt))[uap->start];
num = min(SCARG(uap, num), nldt);
lp = &((union descriptor *)(pcb->pcb_ldt))[SCARG(uap, start)];
} else {
nldt = sizeof(ldt)/sizeof(ldt[0]);
num = min(uap->num, nldt);
lp = &ldt[uap->start];
num = min(SCARG(uap, num), nldt);
lp = &ldt[SCARG(uap, start)];
}
if (uap->start > nldt) {
if (SCARG(uap, start) > nldt) {
splx(s);
return(EINVAL);
}
error = copyout(lp, uap->desc, num * sizeof(union descriptor));
error = copyout(lp, SCARG(uap, desc), num * sizeof(union descriptor));
if (!error)
*retval = num;
@ -192,7 +197,7 @@ int
i386_set_ldt(p, args, retval)
struct proc *p;
char *args;
int *retval;
register_t *retval;
{
int error = 0, i, n;
struct pcb *pcb = &p->p_addr->u_pcb;
@ -206,15 +211,16 @@ i386_set_ldt(p, args, retval)
uap = &ua;
#ifdef DEBUG
printf("i386_set_ldt: start=%d num=%d descs=%x\n", uap->start, uap->num, uap->desc);
printf("i386_set_ldt: start=%d num=%d descs=%x\n", SCARG(uap, start),
SCARG(uap, num), SCARG(uap, desc));
#endif
if (uap->start < 0 || uap->num < 0)
if (SCARG(uap, start) < 0 || SCARG(uap, num) < 0)
return(EINVAL);
/* XXX Should be 8192 ! */
if (uap->start > 512 ||
(uap->start + uap->num) > 512)
if (SCARG(uap, start) > 512 ||
(SCARG(uap, start) + SCARG(uap, num)) > 512)
return(EINVAL);
/* allocate user ldt */
@ -231,9 +237,9 @@ i386_set_ldt(p, args, retval)
}
/* Check descriptors for access violations */
for (i = 0, n = uap->start; i < uap->num; i++, n++) {
for (i = 0, n = SCARG(uap, start); i < SCARG(uap, num); i++, n++) {
union descriptor desc, *dp;
dp = &uap->desc[i];
dp = &SCARG(uap, desc)[i];
error = copyin(dp, &desc, sizeof(union descriptor));
if (error)
return(error);
@ -282,9 +288,10 @@ i386_set_ldt(p, args, retval)
s = splhigh();
/* Fill in range */
for (i = 0, n = uap->start; i < uap->num && !error; i++, n++) {
for (i = 0, n = SCARG(uap, start); i < SCARG(uap, num) && !error;
i++, n++) {
union descriptor desc, *dp;
dp = &uap->desc[i];
dp = &SCARG(uap, desc)[i];
lp = &((union descriptor *)(pcb->pcb_ldt))[n];
#ifdef DEBUG
printf("i386_set_ldt(%d): ldtp=%x\n", p->p_pid, lp);
@ -292,7 +299,7 @@ i386_set_ldt(p, args, retval)
error = copyin(dp, lp, sizeof(union descriptor));
}
if (!error) {
*retval = uap->start;
*retval = SCARG(uap, start);
if (p == curproc)
set_user_ldt(pcb);
}
@ -302,27 +309,25 @@ i386_set_ldt(p, args, retval)
}
#endif /* USER_LDT */
struct sysarch_args {
int op;
char *parms;
};
int
sysarch(p, uap, retval)
struct proc *p;
register struct sysarch_args *uap;
int *retval;
struct sysarch_args /* {
syscallarg(int) op;
syscallarg(char *) parms;
} */ *uap;
register_t *retval;
{
int error = 0;
switch(uap->op) {
switch(SCARG(uap, op)) {
#ifdef USER_LDT
case I386_GET_LDT:
error = i386_get_ldt(p, uap->parms, retval);
error = i386_get_ldt(p, SCARG(uap, parms), retval);
break;
case I386_SET_LDT:
error = i386_set_ldt(p, uap->parms, retval);
error = i386_set_ldt(p, SCARG(uap, parms), retval);
break;
#endif
default:

View File

@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
* $Id: trap.c,v 1.52 1994/09/05 01:08:43 mycroft Exp $
* $Id: trap.c,v 1.53 1994/10/20 04:43:26 cgd Exp $
*/
/*
@ -534,23 +534,24 @@ syscall(frame)
callp = &callp[0]; /* illegal */
else
callp = &callp[code];
argsize = callp->sy_narg * sizeof(int);
argsize = callp->sy_argsize;
if (argsize && (error = copyin(params, (caddr_t)args, argsize))) {
#ifdef SYSCALL_DEBUG
scdebug_call(p, code, callp->sy_narg, args);
scdebug_call(p, code, argsize, args);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code, callp->sy_narg, &args);
ktrsyscall(p->p_tracep, code, callp->sy_narg, argsize,
&args);
#endif
goto bad;
}
#ifdef SYSCALL_DEBUG
scdebug_call(p, code, callp->sy_narg, args);
scdebug_call(p, code, argsize, args);
#endif
#ifdef KTRACE
if (KTRPOINT(p, KTR_SYSCALL))
ktrsyscall(p->p_tracep, code, callp->sy_narg, &args);
ktrsyscall(p->p_tracep, code, callp->sy_narg, argsize, &args);
#endif
rval[0] = 0;
rval[1] = frame.tf_edx;

View File

@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* from: @(#)types.h 7.5 (Berkeley) 3/9/91
* $Id: types.h,v 1.6 1994/07/20 05:44:19 cgd Exp $
* $Id: types.h,v 1.7 1994/10/20 04:43:29 cgd Exp $
*/
#ifndef _MACHTYPES_H_
@ -62,4 +62,6 @@ typedef unsigned int u_int32_t;
typedef long long int64_t;
typedef unsigned long long u_int64_t;
typedef int32_t register_t;
#endif /* _MACHTYPES_H_ */