mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-26 20:12:44 +00:00
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:
parent
5bd7b976c1
commit
d439598dd0
@ -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__
|
@ -0,0 +1,3 @@
|
||||
debug.dtracetest.fbttest: 0 -> 0
|
||||
1 2 3 4 5 6 7 8 9 10
|
||||
|
@ -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 \
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user