version 1.1, 1999/09/13 10:31:32 |
version 1.2, 2000/04/13 15:54:27 |
|
|
#include <sys/uio.h> |
#include <sys/uio.h> |
#include <sys/kernel.h> |
#include <sys/kernel.h> |
#include <sys/buf.h> |
#include <sys/buf.h> |
#include <sys/trace.h> |
|
#include <sys/signal.h> |
#include <sys/signal.h> |
|
|
#include <sys/mount.h> |
#include <sys/mount.h> |
|
|
#include <machine/psl.h> |
#include <machine/psl.h> |
#include <machine/reg.h> |
#include <machine/reg.h> |
|
|
extern vm_map_t kernel_map; |
|
|
|
|
|
#ifdef TRACE |
|
int nvualarm; |
|
|
|
int |
|
sys_vtrace(p, v, retval) |
|
struct proc *p; |
|
void *v; |
|
register_t *retval; |
|
{ |
|
register struct sys_vtrace_args /* { |
|
syscallarg(int) request; |
|
syscallarg(int) value; |
|
} */ *uap = v; |
|
int vdoualarm(); |
|
|
|
switch (SCARG(uap, request)) { |
|
|
|
case VTR_DISABLE: /* disable a trace point */ |
|
case VTR_ENABLE: /* enable a trace point */ |
|
if (SCARG(uap, value) < 0 || SCARG(uap, value) >= TR_NFLAGS) |
|
return (EINVAL); |
|
*retval = traceflags[SCARG(uap, value)]; |
|
traceflags[SCARG(uap, value)] = SCARG(uap, request); |
|
break; |
|
|
|
case VTR_VALUE: /* return a trace point setting */ |
|
if (SCARG(uap, value) < 0 || SCARG(uap, value) >= TR_NFLAGS) |
|
return (EINVAL); |
|
*retval = traceflags[SCARG(uap, value)]; |
|
break; |
|
|
|
case VTR_UALARM: /* set a real-time ualarm, less than 1 min */ |
|
if (SCARG(uap, value) <= 0 || SCARG(uap, value) > 60 * hz || |
|
nvualarm > 5) |
|
return (EINVAL); |
|
nvualarm++; |
|
timeout(vdoualarm, (caddr_t)p->p_pid, SCARG(uap, value)); |
|
break; |
|
|
|
case VTR_STAMP: |
|
trace(TR_STAMP, SCARG(uap, value), p->p_pid); |
|
break; |
|
} |
|
return (0); |
|
} |
|
|
|
vdoualarm(arg) |
|
int arg; |
|
{ |
|
register struct proc *p; |
|
|
|
p = pfind(arg); |
|
if (p) |
|
psignal(p, 16); |
|
nvualarm--; |
|
} |
|
#endif /* TRACE */ |
|
|
|
int |
int |
sys_sysarch(p, v, retval) |
sys_sysarch(p, v, retval) |
struct proc *p; |
struct proc *p; |