aboutsummaryrefslogtreecommitdiff
path: root/sys/cddl/dev/dtrace/dtrace_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cddl/dev/dtrace/dtrace_test.c')
-rw-r--r--sys/cddl/dev/dtrace/dtrace_test.c37
1 files changed, 28 insertions, 9 deletions
diff --git a/sys/cddl/dev/dtrace/dtrace_test.c b/sys/cddl/dev/dtrace/dtrace_test.c
index eccfc1a4dfd4..a61958d9184a 100644
--- a/sys/cddl/dev/dtrace/dtrace_test.c
+++ b/sys/cddl/dev/dtrace/dtrace_test.c
@@ -22,10 +22,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
- *
*/
-#include <sys/cdefs.h>
+
#include <sys/types.h>
#include <sys/param.h>
#include <sys/systm.h>
@@ -39,8 +37,8 @@
SDT_PROVIDER_DEFINE(test);
-SDT_PROBE_DEFINE7(test, , , sdttest, "int", "int", "int", "int", "int",
- "int", "int");
+SDT_PROBE_DEFINE6(test, , , sdttest, "int", "int", "int", "int", "int",
+ "int");
/*
* These are variables that the DTrace test suite references in the
@@ -53,13 +51,27 @@ typedef struct vnode vnode_t;
vnode_t dummy;
vnode_t *rootvp = &dummy;
+enum argtest {
+ ARGTEST_SDT,
+ ARGTEST_FBT,
+};
+
+extern void fbttest(int, int, int, int, int, int, int, int, int, int);
+
+void __noinline
+fbttest(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
+{
+ printf("fbttest(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d)\n",
+ a, b, c, d, e, f, g, h, i, j);
+}
+
/*
* 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)
+dtrace_test_argtest(SYSCTL_HANDLER_ARGS)
{
int val, error;
@@ -70,7 +82,10 @@ dtrace_test_sdttest(SYSCTL_HANDLER_ARGS)
else if (val == 0)
return (0);
- SDT_PROBE7(test, , , sdttest, 1, 2, 3, 4, 5, 6, 7);
+ if (arg2 == ARGTEST_SDT)
+ SDT_PROBE6(test, , , sdttest, 1, 2, 3, 4, 5, 6);
+ else
+ fbttest(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
return (error);
}
@@ -80,8 +95,13 @@ static SYSCTL_NODE(_debug, OID_AUTO, dtracetest,
"");
SYSCTL_PROC(_debug_dtracetest, OID_AUTO, sdttest,
- CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RW, NULL, 0, dtrace_test_sdttest,
+ CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RW, NULL, ARGTEST_SDT,
+ dtrace_test_argtest,
"I", "Trigger the SDT test probe");
+SYSCTL_PROC(_debug_dtracetest, OID_AUTO, fbttest,
+ CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RW, NULL, ARGTEST_FBT,
+ dtrace_test_argtest,
+ "I", "Trigger the FBT test probe");
static int
dtrace_test_modevent(module_t mod, int type, void *data)
@@ -108,4 +128,3 @@ dtrace_test_modevent(module_t mod, int type, void *data)
DEV_MODULE(dtrace_test, dtrace_test_modevent, NULL);
MODULE_VERSION(dtrace_test, 1);
-MODULE_DEPEND(dtrace_test, dtraceall, 1, 1, 1);