summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.c20
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.d4
-rw-r--r--sys/cddl/dev/dtrace/dtrace_test.c37
-rw-r--r--sys/modules/dtrace/dtrace_test/Makefile3
4 files changed, 50 insertions, 14 deletions
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.c
index e2e9505..013a9e7 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.c
@@ -26,26 +26,24 @@
#pragma ident "%Z%%M% %I% %E% SMI"
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
+#include <err.h>
#include <unistd.h>
-#ifndef __FreeBSD__
-#include <sys/uadmin.h>
-#endif
int
main(int argc, char **argv)
{
-#ifdef __FreeBSD__
- return (1);
-#else
+ int val = 1;
+
while (1) {
- if (uadmin(A_SDTTEST, 0, 0) < 0) {
- perror("uadmin");
- return (1);
- }
+ if (sysctlbyname("debug.dtracetest.sdttest", NULL, NULL, &val,
+ sizeof(val)))
+ err(1, "sysctlbyname");
sleep(1);
}
return (0);
-#endif
}
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.d
index 0523de0..e965b05 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.d
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/sdt/tst.sdtargs.d
@@ -43,7 +43,7 @@ ERROR
exit(1);
}
-sdt:::test
+test:::sdttest
/arg0 != 1 || arg1 != 2 || arg2 != 3 || arg3 != 4 || arg4 != 5 || arg5 != 6 ||
arg6 != 7/
{
@@ -54,7 +54,7 @@ sdt:::test
exit(1);
}
-sdt:::test
+test:::sdttest
{
exit(0);
}
diff --git a/sys/cddl/dev/dtrace/dtrace_test.c b/sys/cddl/dev/dtrace/dtrace_test.c
index d484fb2..f50ad89 100644
--- a/sys/cddl/dev/dtrace/dtrace_test.c
+++ b/sys/cddl/dev/dtrace/dtrace_test.c
@@ -25,15 +25,25 @@
* $FreeBSD$
*
*/
+#include "opt_kdtrace.h"
#include <sys/cdefs.h>
#include <sys/types.h>
#include <sys/param.h>
+#include <sys/systm.h>
+
#include <sys/conf.h>
#include <sys/kernel.h>
#include <sys/module.h>
+#include <sys/sdt.h>
+#include <sys/sysctl.h>
#include <sys/vnode.h>
+SDT_PROVIDER_DEFINE(test);
+
+SDT_PROBE_DEFINE7(test, , , sdttest, sdttest, "int", "int", "int", "int", "int",
+ "int", "int");
+
/*
* These are variables that the DTrace test suite references in the
* Solaris kernel. We define them here so that the tests function
@@ -45,6 +55,33 @@ typedef struct vnode vnode_t;
vnode_t dummy;
vnode_t *rootvp = &dummy;
+/*
+ * Test SDT probes with more than 5 arguments. On amd64, such probes require
+ * special handling since only the first 5 arguments will be passed to
+ * dtrace_probe() in registers; the rest must be fetched off the stack.
+ */
+static int
+dtrace_test_sdttest(SYSCTL_HANDLER_ARGS)
+{
+ int val, error;
+
+ val = 0;
+ error = sysctl_handle_int(oidp, &val, 0, req);
+ if (error || req->newptr == NULL)
+ return (error);
+ else if (val == 0)
+ return (0);
+
+ SDT_PROBE7(test, , , sdttest, 1, 2, 3, 4, 5, 6, 7);
+
+ return (error);
+}
+
+static SYSCTL_NODE(_debug, OID_AUTO, dtracetest, CTLFLAG_RD, 0, "");
+
+SYSCTL_PROC(_debug_dtracetest, OID_AUTO, sdttest, CTLTYPE_INT | CTLFLAG_RW,
+ NULL, 0, dtrace_test_sdttest, "I", "Trigger the SDT test probe");
+
static int
dtrace_test_modevent(module_t mod, int type, void *data)
{
diff --git a/sys/modules/dtrace/dtrace_test/Makefile b/sys/modules/dtrace/dtrace_test/Makefile
index bc096f3..b03fe17 100644
--- a/sys/modules/dtrace/dtrace_test/Makefile
+++ b/sys/modules/dtrace/dtrace_test/Makefile
@@ -5,8 +5,9 @@
KMOD= dtrace_test
SRCS= dtrace_test.c
+SRCS+= opt_kdtrace.h
SRCS+= vnode_if.h
-
+
CFLAGS+= -I${.CURDIR}/../../..
CFLAGS+= -D_KERNEL
OpenPOWER on IntegriCloud