Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/compat/freebsd add emulation of FreeBSD utrace(2)



details:   https://anonhg.NetBSD.org/src/rev/b7c1a28d5b78
branches:  trunk
changeset: 500722:b7c1a28d5b78
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Sun Dec 17 16:11:38 2000 +0000

description:
add emulation of FreeBSD utrace(2)

diffstat:

 sys/compat/freebsd/freebsd_misc.c  |  44 +++++++++++++++++++++++++++++++++++++-
 sys/compat/freebsd/syscalls.master |   6 ++--
 2 files changed, 46 insertions(+), 4 deletions(-)

diffs (103 lines):

diff -r 9959f3760e79 -r b7c1a28d5b78 sys/compat/freebsd/freebsd_misc.c
--- a/sys/compat/freebsd/freebsd_misc.c Sun Dec 17 16:09:40 2000 +0000
+++ b/sys/compat/freebsd/freebsd_misc.c Sun Dec 17 16:11:38 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: freebsd_misc.c,v 1.9 2000/12/01 18:03:54 jdolecek Exp $        */
+/*     $NetBSD: freebsd_misc.c,v 1.10 2000/12/17 16:11:38 jdolecek Exp $       */
 
 /*
  * Copyright (c) 1995 Frank van der Linden
@@ -37,6 +37,7 @@
 
 #if defined(_KERNEL) && !defined(_LKM)
 #include "opt_ntp.h"
+#include "opt_ktrace.h"
 #endif
 
 #include <sys/param.h>
@@ -45,6 +46,10 @@
 #include <sys/mount.h>
 #include <sys/signal.h>
 #include <sys/signalvar.h>
+#include <sys/malloc.h>
+#ifdef KTRACE
+#include <sys/ktrace.h>
+#endif
 
 #include <sys/syscallargs.h>
 
@@ -54,6 +59,9 @@
 #include <compat/freebsd/freebsd_timex.h>
 #include <compat/freebsd/freebsd_signal.h>
 
+void    ktrinitheader(struct ktr_header *, struct proc *, int);
+int    ktrwrite(struct proc *, struct ktr_header *);
+
 int
 freebsd_sys_msync(p, v, retval)
        struct proc *p;
@@ -151,3 +159,37 @@
        }
        return (0);
 }
+
+int
+freebsd_sys_utrace(p, v, retval)
+       struct proc *p;
+       void *v;
+       register_t *retval;
+{
+       struct freebsd_sys_utrace_args /* {
+               syscallarg(void *) addr;
+               syscallarg(size_t) len;
+       } */ *uap = v;
+#ifdef KTRACE
+       struct ktr_header kth;
+       register caddr_t cp;
+       int error = 0;
+
+       if (!KTRPOINT(p, KTR_USER))
+               return (0);
+       p->p_traceflag |= KTRFAC_ACTIVE;
+       ktrinitheader(&kth, p, KTR_USER);
+       cp = (caddr_t) malloc(SCARG(uap, len), M_TEMP, M_WAITOK);
+       if ((error = copyin(SCARG(uap, addr), cp, SCARG(uap, len))) == 0) {
+               kth.ktr_buf = cp;
+               kth.ktr_len = SCARG(uap, len);
+               error = ktrwrite(p, &kth);
+       }
+       free(cp, M_TEMP);
+       p->p_traceflag &= ~KTRFAC_ACTIVE;
+
+       return (error);
+#else
+       return ENOSYS;
+#endif
+}
diff -r 9959f3760e79 -r b7c1a28d5b78 sys/compat/freebsd/syscalls.master
--- a/sys/compat/freebsd/syscalls.master        Sun Dec 17 16:09:40 2000 +0000
+++ b/sys/compat/freebsd/syscalls.master        Sun Dec 17 16:11:38 2000 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.33 2000/12/09 07:10:35 mycroft Exp $
+       $NetBSD: syscalls.master,v 1.34 2000/12/17 16:11:38 jdolecek Exp $
 
 ;      from: @(#)syscalls.master       8.2 (Berkeley) 1/13/94
 
@@ -128,7 +128,7 @@
 45     NOARGS          { int sys_ktrace(char *fname, int ops, int facs, \
                            int pid); }
 #else
-45     UNIMPL          ktrace
+45     EXCL            ktrace
 #endif
 46     NOARGS          { int compat_13_sys_sigaction(int signum, \
                            const struct sigaction13 *nsa, \
@@ -590,7 +590,7 @@
 332    UNIMPL          sched_get_priority_max
 333    UNIMPL          sched_get_priority_min
 334    UNIMPL          sched_rr_get_interval
-335    UNIMPL          utrace
+335    STD             { int freebsd_sys_utrace(void *addr, size_t len); }
 336    UNIMPL          sendfile
 337    UNIMPL          kldsym
 338    UNIMPL          jail



Home | Main Index | Thread Index | Old Index