diff options
Diffstat (limited to 'sys/kern')
| -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 |
4 files changed, 44 insertions, 5 deletions
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c index 59a3e5e3e8f2..0bd62906ae9a 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 46b1ca6b48d2..595e4efb8402 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 ded3c53701b9..fd06481974bb 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 ad5ba53e1c48..c0c5f0fdbb50 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 |
