From: Chris G. Demetriou Date: Wed, 15 Feb 1995 02:56:20 +0000 (-0800) Subject: return types, syscall arg conventions & recording fixes. X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/d2b6e950029a19215247e6598fc9d10adb62647b return types, syscall arg conventions & recording fixes. SCCS-vsn: sys/kern/kern_ktrace.c 8.4 --- diff --git a/usr/src/sys/kern/kern_ktrace.c b/usr/src/sys/kern/kern_ktrace.c index e701e6a14d..cf665fb0e8 100644 --- a/usr/src/sys/kern/kern_ktrace.c +++ b/usr/src/sys/kern/kern_ktrace.c @@ -4,12 +4,13 @@ * * %sccs.include.redist.c% * - * @(#)kern_ktrace.c 8.3 (Berkeley) %G% + * @(#)kern_ktrace.c 8.4 (Berkeley) %G% */ #ifdef KTRACE #include +#include #include #include #include @@ -18,6 +19,9 @@ #include #include +#include +#include + struct ktr_header * ktrgetheader(type) int type; @@ -34,23 +38,26 @@ ktrgetheader(type) return (kth); } -ktrsyscall(vp, code, narg, args) +void +ktrsyscall(vp, code, argsize, args) struct vnode *vp; - int code, narg, args[]; + int code, argsize; + register_t args[]; { struct ktr_header *kth; struct ktr_syscall *ktp; - register len = sizeof(struct ktr_syscall) + (narg * sizeof(int)); + register len = sizeof(struct ktr_syscall) + argsize; struct proc *p = curproc; /* XXX */ - int *argp, i; + register_t *argp; + int i; p->p_traceflag |= KTRFAC_ACTIVE; kth = ktrgetheader(KTR_SYSCALL); MALLOC(ktp, struct ktr_syscall *, len, M_TEMP, M_WAITOK); ktp->ktr_code = code; - ktp->ktr_narg = narg; - argp = (int *)((char *)ktp + sizeof(struct ktr_syscall)); - for (i = 0; i < narg; i++) + ktp->ktr_argsize = argsize; + argp = (register_t *)((char *)ktp + sizeof(struct ktr_syscall)); + for (i = 0; i < (argsize / sizeof *argp); i++) *argp++ = args[i]; kth->ktr_buf = (caddr_t)ktp; kth->ktr_len = len; @@ -60,6 +67,7 @@ ktrsyscall(vp, code, narg, args) p->p_traceflag &= ~KTRFAC_ACTIVE; } +void ktrsysret(vp, code, error, retval) struct vnode *vp; int code, error, retval; @@ -82,6 +90,7 @@ ktrsysret(vp, code, error, retval) p->p_traceflag &= ~KTRFAC_ACTIVE; } +void ktrnamei(vp, path) struct vnode *vp; char *path; @@ -99,6 +108,7 @@ ktrnamei(vp, path) p->p_traceflag &= ~KTRFAC_ACTIVE; } +void ktrgenio(vp, fd, rw, iov, len, error) struct vnode *vp; int fd; @@ -140,6 +150,7 @@ done: p->p_traceflag &= ~KTRFAC_ACTIVE; } +void ktrpsig(vp, sig, action, mask, code) struct vnode *vp; int sig; @@ -164,6 +175,7 @@ ktrpsig(vp, sig, action, mask, code) p->p_traceflag &= ~KTRFAC_ACTIVE; } +void ktrcsw(vp, out, user) struct vnode *vp; int out, user; @@ -189,24 +201,24 @@ ktrcsw(vp, out, user) /* * ktrace system call */ -struct ktrace_args { - char *fname; - int ops; - int facs; - int pid; -}; /* ARGSUSED */ +int ktrace(curp, uap, retval) struct proc *curp; - register struct ktrace_args *uap; - int *retval; + register struct ktrace_args /* { + syscallarg(char *) fname; + syscallarg(int) ops; + syscallarg(int) facs; + syscallarg(int) pid; + } */ *uap; + register_t *retval; { register struct vnode *vp = NULL; register struct proc *p; struct pgrp *pg; - int facs = uap->facs & ~KTRFAC_ROOT; - int ops = KTROP(uap->ops); - int descend = uap->ops & KTRFLAG_DESCEND; + int facs = SCARG(uap, facs) & ~KTRFAC_ROOT; + int ops = KTROP(SCARG(uap, ops)); + int descend = SCARG(uap, ops) & KTRFLAG_DESCEND; int ret = 0; int error = 0; struct nameidata nd; @@ -216,7 +228,8 @@ ktrace(curp, uap, retval) /* * an operation which requires a file argument. */ - NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, uap->fname, curp); + NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, SCARG(uap, fname), + curp); if (error = vn_open(&nd, FREAD|FWRITE, 0)) { curp->p_traceflag &= ~KTRFAC_ACTIVE; return (error); @@ -256,11 +269,11 @@ ktrace(curp, uap, retval) /* * do it */ - if (uap->pid < 0) { + if (SCARG(uap, pid) < 0) { /* * by process group */ - pg = pgfind(-uap->pid); + pg = pgfind(-SCARG(uap, pid)); if (pg == NULL) { error = ESRCH; goto done; @@ -275,7 +288,7 @@ ktrace(curp, uap, retval) /* * by pid */ - p = pfind(uap->pid); + p = pfind(SCARG(uap, pid)); if (p == NULL) { error = ESRCH; goto done;