return types, syscall arg conventions & recording fixes.
authorChris G. Demetriou <cgd@ucbvax.Berkeley.EDU>
Wed, 15 Feb 1995 02:56:20 +0000 (18:56 -0800)
committerChris G. Demetriou <cgd@ucbvax.Berkeley.EDU>
Wed, 15 Feb 1995 02:56:20 +0000 (18:56 -0800)
SCCS-vsn: sys/kern/kern_ktrace.c 8.4

usr/src/sys/kern/kern_ktrace.c

index e701e6a..cf665fb 100644 (file)
@@ -4,12 +4,13 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)kern_ktrace.c       8.3 (Berkeley) %G%
+ *     @(#)kern_ktrace.c       8.4 (Berkeley) %G%
  */
 
 #ifdef KTRACE
 
 #include <sys/param.h>
  */
 
 #ifdef KTRACE
 
 #include <sys/param.h>
+#include <sys/systm.h>
 #include <sys/proc.h>
 #include <sys/file.h>
 #include <sys/namei.h>
 #include <sys/proc.h>
 #include <sys/file.h>
 #include <sys/namei.h>
@@ -18,6 +19,9 @@
 #include <sys/malloc.h>
 #include <sys/syslog.h>
 
 #include <sys/malloc.h>
 #include <sys/syslog.h>
 
+#include <sys/mount.h>
+#include <sys/syscallargs.h>
+
 struct ktr_header *
 ktrgetheader(type)
        int type;
 struct ktr_header *
 ktrgetheader(type)
        int type;
@@ -34,23 +38,26 @@ ktrgetheader(type)
        return (kth);
 }
 
        return (kth);
 }
 
-ktrsyscall(vp, code, narg, args)
+void
+ktrsyscall(vp, code, argsize, args)
        struct vnode *vp;
        struct vnode *vp;
-       int code, narg, args[];
+       int code, argsize;
+       register_t args[];
 {
        struct  ktr_header *kth;
        struct  ktr_syscall *ktp;
 {
        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 */
        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;
 
        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;
                *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;
 }
 
        p->p_traceflag &= ~KTRFAC_ACTIVE;
 }
 
+void
 ktrsysret(vp, code, error, retval)
        struct vnode *vp;
        int code, error, retval;
 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;
 }
 
        p->p_traceflag &= ~KTRFAC_ACTIVE;
 }
 
+void
 ktrnamei(vp, path)
        struct vnode *vp;
        char *path;
 ktrnamei(vp, path)
        struct vnode *vp;
        char *path;
@@ -99,6 +108,7 @@ ktrnamei(vp, path)
        p->p_traceflag &= ~KTRFAC_ACTIVE;
 }
 
        p->p_traceflag &= ~KTRFAC_ACTIVE;
 }
 
+void
 ktrgenio(vp, fd, rw, iov, len, error)
        struct vnode *vp;
        int fd;
 ktrgenio(vp, fd, rw, iov, len, error)
        struct vnode *vp;
        int fd;
@@ -140,6 +150,7 @@ done:
        p->p_traceflag &= ~KTRFAC_ACTIVE;
 }
 
        p->p_traceflag &= ~KTRFAC_ACTIVE;
 }
 
+void
 ktrpsig(vp, sig, action, mask, code)
        struct vnode *vp;
        int sig;
 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;
 }
 
        p->p_traceflag &= ~KTRFAC_ACTIVE;
 }
 
+void
 ktrcsw(vp, out, user)
        struct vnode *vp;
        int out, user;
 ktrcsw(vp, out, user)
        struct vnode *vp;
        int out, user;
@@ -189,24 +201,24 @@ ktrcsw(vp, out, user)
 /*
  * ktrace system call
  */
 /*
  * ktrace system call
  */
-struct ktrace_args {
-       char    *fname;
-       int     ops;
-       int     facs;
-       int     pid;
-};
 /* ARGSUSED */
 /* ARGSUSED */
+int
 ktrace(curp, uap, retval)
        struct proc *curp;
 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;
 {
        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;
        int ret = 0;
        int error = 0;
        struct nameidata nd;
@@ -216,7 +228,8 @@ ktrace(curp, uap, retval)
                /*
                 * an operation which requires a file argument.
                 */
                /*
                 * 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);
                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
         */
        /* 
         * do it
         */
-       if (uap->pid < 0) {
+       if (SCARG(uap, pid) < 0) {
                /*
                 * by process group
                 */
                /*
                 * by process group
                 */
-               pg = pgfind(-uap->pid);
+               pg = pgfind(-SCARG(uap, pid));
                if (pg == NULL) {
                        error = ESRCH;
                        goto done;
                if (pg == NULL) {
                        error = ESRCH;
                        goto done;
@@ -275,7 +288,7 @@ ktrace(curp, uap, retval)
                /*
                 * by pid
                 */
                /*
                 * by pid
                 */
-               p = pfind(uap->pid);
+               p = pfind(SCARG(uap, pid));
                if (p == NULL) {
                        error = ESRCH;
                        goto done;
                if (p == NULL) {
                        error = ESRCH;
                        goto done;