git: 37a29946b91b - stable/14 - dtrace tests: Add a test case which validates FBT probe arguments
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 04 Oct 2024 15:57:03 UTC
The branch stable/14 has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=37a29946b91b1360102ff9cc33eaf352a2f17726
commit 37a29946b91b1360102ff9cc33eaf352a2f17726
Author: Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2024-09-19 09:22:03 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-10-04 15:56:42 +0000
dtrace tests: Add a test case which validates FBT probe arguments
Reviewed by: avg
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D46674
(cherry picked from commit d439598dd0d341b0c0b77151ba904e09c42f8421)
---
.../test/tst/common/fbtprovider/tst.argtest.ksh | 34 ++++++++++++++++++++++
.../tst/common/fbtprovider/tst.argtest.ksh.out | 3 ++
.../dtrace/tests/common/fbtprovider/Makefile | 2 ++
sys/cddl/dev/dtrace/dtrace_test.c | 28 ++++++++++++++++--
4 files changed, 64 insertions(+), 3 deletions(-)
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.argtest.ksh b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.argtest.ksh
new file mode 100644
index 000000000000..dc3641b01101
--- /dev/null
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.argtest.ksh
@@ -0,0 +1,34 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2024 Mark Johnston <markj@FreeBSD.org>
+#
+
+dtrace=$1
+
+$dtrace -q -s /dev/stdin -c "sysctl debug.dtracetest.fbttest=1" <<__EOF__
+fbt:dtrace_test:fbttest:entry
+{
+ printf("%d %d %d %d %d %d %d %d %d %d\n", args[0], args[1], args[2],
+ args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
+}
+__EOF__
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.argtest.ksh.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.argtest.ksh.out
new file mode 100644
index 000000000000..301e154b3339
--- /dev/null
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.argtest.ksh.out
@@ -0,0 +1,3 @@
+debug.dtracetest.fbttest: 0 -> 0
+1 2 3 4 5 6 7 8 9 10
+
diff --git a/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile b/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile
index 4aaf2013d59f..14394f9681eb 100644
--- a/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile
+++ b/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile
@@ -7,6 +7,8 @@ PACKAGE= tests
${PACKAGE}FILES= \
err.D_PDESC_ZERO.notreturn.d \
+ tst.argtest.ksh \
+ tst.argtest.ksh.out \
tst.basic.d \
tst.functionentry.d \
tst.functionreturnvalue.d \
diff --git a/sys/cddl/dev/dtrace/dtrace_test.c b/sys/cddl/dev/dtrace/dtrace_test.c
index 6c4fcc8d4080..ee9c63034ed9 100644
--- a/sys/cddl/dev/dtrace/dtrace_test.c
+++ b/sys/cddl/dev/dtrace/dtrace_test.c
@@ -51,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;
@@ -68,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_PROBE7(test, , , sdttest, 1, 2, 3, 4, 5, 6, 7);
+ else
+ fbttest(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
return (error);
}
@@ -78,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)