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