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
This commit is contained in:
Mark Johnston 2024-09-19 09:22:03 +00:00
parent 5bd7b976c1
commit d439598dd0
4 changed files with 64 additions and 3 deletions

View File

@ -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__

View File

@ -0,0 +1,3 @@
debug.dtracetest.fbttest: 0 -> 0
1 2 3 4 5 6 7 8 9 10

View File

@ -6,6 +6,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 \

View File

@ -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_PROBE6(test, , , sdttest, 1, 2, 3, 4, 5, 6);
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);
}
@ -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)