update for new syscall args description mechanism
This commit is contained in:
parent
3c8b6feab0
commit
77e4fe47ef
|
@ -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;
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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_ */
|
||||
|
|
Loading…
Reference in New Issue