diff options
-rw-r--r-- | sys/kern/init_sysent.c | 2 | ||||
-rw-r--r-- | sys/kern/kern_ktrace.c | 41 | ||||
-rw-r--r-- | sys/kern/syscalls.c | 2 | ||||
-rw-r--r-- | sys/kern/syscalls.master | 4 | ||||
-rw-r--r-- | sys/sys/ktrace.h | 15 | ||||
-rw-r--r-- | sys/sys/syscall-hide.h | 1 | ||||
-rw-r--r-- | sys/sys/syscall.h | 1 | ||||
-rw-r--r-- | sys/sys/sysproto.h | 5 |
8 files changed, 65 insertions, 6 deletions
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c index 59a3e5e..0bd6290 100644 --- a/sys/kern/init_sysent.c +++ b/sys/kern/init_sysent.c @@ -239,7 +239,7 @@ struct sysent sysent[] = { { 6, (sy_call_t *)__sysctl }, /* 202 = __sysctl */ { 2, (sy_call_t *)mlock }, /* 203 = mlock */ { 2, (sy_call_t *)munlock }, /* 204 = munlock */ - { 0, (sy_call_t *)nosys }, /* 205 = nosys */ + { 2, (sy_call_t *)utrace }, /* 205 = utrace */ { 0, (sy_call_t *)nosys }, /* 206 = nosys */ { 0, (sy_call_t *)nosys }, /* 207 = nosys */ { 0, (sy_call_t *)nosys }, /* 208 = nosys */ diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c index 46b1ca6..595e4ef 100644 --- a/sys/kern/kern_ktrace.c +++ b/sys/kern/kern_ktrace.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)kern_ktrace.c 8.2 (Berkeley) 9/23/93 - * $Id: kern_ktrace.c,v 1.11 1996/03/11 06:03:23 hsu Exp $ + * $Id: kern_ktrace.c,v 1.12 1996/08/04 20:13:07 phk Exp $ */ #include "opt_ktrace.h" @@ -346,6 +346,45 @@ done: #endif } +/* + * utrace system call + */ +/* ARGSUSED */ +int +utrace(curp, uap, retval) + struct proc *curp; + register struct utrace_args *uap; + int *retval; +{ +#ifdef KTRACE + register struct ktr_user *ktp; + struct ktr_header *kth; + struct proc *p = curproc; /* XXX */ + register caddr_t cp; + + if (!KTRPOINT(p, KTR_USER)) + return (0); + p->p_traceflag |= KTRFAC_ACTIVE; + kth = ktrgetheader(KTR_USER); + MALLOC(ktp, struct ktr_user *, sizeof(struct ktr_user) + uap->len, + M_KTRACE, M_WAITOK); + ktp->len = uap->len; + cp = (caddr_t)((char *)ktp + sizeof (struct ktr_user)); + if (!copyin(uap->addr, cp, uap->len)) { + kth->ktr_buf = (caddr_t)ktp; + kth->ktr_len = sizeof (struct ktr_user) + uap->len; + ktrwrite(p->p_tracep, kth); + } + FREE(kth, M_KTRACE); + FREE(ktp, M_KTRACE); + p->p_traceflag &= ~KTRFAC_ACTIVE; + + return (0); +#else + return (ENOSYS); +#endif +} + #ifdef KTRACE static int ktrops(curp, p, ops, facs, vp) diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c index ded3c53..fd06481 100644 --- a/sys/kern/syscalls.c +++ b/sys/kern/syscalls.c @@ -226,7 +226,7 @@ char *syscallnames[] = { "__sysctl", /* 202 = __sysctl */ "mlock", /* 203 = mlock */ "munlock", /* 204 = munlock */ - "#205", /* 205 = nosys */ + "utrace", /* 205 = utrace */ "#206", /* 206 = nosys */ "#207", /* 207 = nosys */ "#208", /* 208 = nosys */ diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master index ad5ba53..c0c5f0f 100644 --- a/sys/kern/syscalls.master +++ b/sys/kern/syscalls.master @@ -1,4 +1,4 @@ - $Id: syscalls.master,v 1.27 1996/03/02 16:51:25 peter Exp $ + $Id: syscalls.master,v 1.28 1996/08/20 07:17:49 smpatel Exp $ ; from: @(#)syscalls.master 8.2 (Berkeley) 1/13/94 ; ; System call name/number master file. @@ -322,7 +322,7 @@ ; here allows to avoid one in libc/sys/Makefile.inc. 203 STD BSD { int mlock(caddr_t addr, size_t len); } 204 STD BSD { int munlock(caddr_t addr, size_t len); } -205 UNIMPL NOHIDE nosys +205 STD BSD { int utrace(caddr_t addr, size_t len); } 206 UNIMPL NOHIDE nosys 207 UNIMPL NOHIDE nosys 208 UNIMPL NOHIDE nosys diff --git a/sys/sys/ktrace.h b/sys/sys/ktrace.h index 6ae1af3..15b155a 100644 --- a/sys/sys/ktrace.h +++ b/sys/sys/ktrace.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)ktrace.h 8.1 (Berkeley) 6/2/93 - * $Id: ktrace.h,v 1.7 1995/03/16 18:16:19 bde Exp $ + * $Id: ktrace.h,v 1.8 1995/12/14 08:32:31 phk Exp $ */ #ifndef _SYS_KTRACE_H_ @@ -133,6 +133,17 @@ struct ktr_csw { }; /* + * KTR_USER - data comming from userland + */ +#define KTR_USER 7 +struct ktr_user { + int len; /* number of bytes */ + /* + * followed by data provided by user + */ +}; + +/* * kernel trace points (in p_traceflag) */ #define KTRFAC_MASK 0x00ffffff @@ -142,6 +153,7 @@ struct ktr_csw { #define KTRFAC_GENIO (1<<KTR_GENIO) #define KTRFAC_PSIG (1<<KTR_PSIG) #define KTRFAC_CSW (1<<KTR_CSW) +#define KTRFAC_USER (1<<KTR_USER) /* * trace flags (also in p_traceflags) */ @@ -163,6 +175,7 @@ void ktrsysret __P((struct vnode *, int, int, int)); __BEGIN_DECLS int ktrace __P((const char *, int, int, pid_t)); +int utrace __P((const caddr_t , size_t)); __END_DECLS #endif /* !KERNEL */ diff --git a/sys/sys/syscall-hide.h b/sys/sys/syscall-hide.h index 7ae407a..cb41f53 100644 --- a/sys/sys/syscall-hide.h +++ b/sys/sys/syscall-hide.h @@ -196,6 +196,7 @@ HIDE_BSD(ftruncate) HIDE_BSD(__sysctl) HIDE_BSD(mlock) HIDE_BSD(munlock) +HIDE_BSD(utrace) HIDE_BSD(__semctl) HIDE_BSD(semget) HIDE_BSD(semop) diff --git a/sys/sys/syscall.h b/sys/sys/syscall.h index 0759e7a..2ee6553 100644 --- a/sys/sys/syscall.h +++ b/sys/sys/syscall.h @@ -190,6 +190,7 @@ #define SYS___sysctl 202 #define SYS_mlock 203 #define SYS_munlock 204 +#define SYS_utrace 205 #define SYS___semctl 220 #define SYS_semget 221 #define SYS_semop 222 diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h index 4aba14d..bb7f136 100644 --- a/sys/sys/sysproto.h +++ b/sys/sys/sysproto.h @@ -653,6 +653,10 @@ struct munlock_args { caddr_t addr; size_t len; }; +struct utrace_args { + caddr_t addr; + size_t len; +}; struct __semctl_args { int semid; int semnum; @@ -873,6 +877,7 @@ int ftruncate __P((struct proc *, struct ftruncate_args *, int [])); int __sysctl __P((struct proc *, struct sysctl_args *, int [])); int mlock __P((struct proc *, struct mlock_args *, int [])); int munlock __P((struct proc *, struct munlock_args *, int [])); +int utrace __P((struct proc *, struct utrace_args *, int [])); int lkmnosys __P((struct proc *, struct nosys_args *, int [])); int __semctl __P((struct proc *, struct __semctl_args *, int [])); int semget __P((struct proc *, struct semget_args *, int [])); |