xref: /netbsd-src/external/cddl/osnet/dev/dtrace/dtrace_test.c (revision ba2539a9805a0544ff82c0003cc02fe1eee5603d)
1*ba2539a9Schs /*	$NetBSD: dtrace_test.c,v 1.3 2018/05/28 21:05:03 chs Exp $	*/
201c9547eSdarran 
3bb8023b5Sdarran /*-
4bb8023b5Sdarran  * Copyright 2008 John Birrell <jb@FreeBSD.org>
5bb8023b5Sdarran  *
6bb8023b5Sdarran  * Redistribution and use in source and binary forms, with or without
7bb8023b5Sdarran  * modification, are permitted provided that the following conditions
8bb8023b5Sdarran  * are met:
9bb8023b5Sdarran  * 1. Redistributions of source code must retain the above copyright
10bb8023b5Sdarran  *    notice, this list of conditions and the following disclaimer.
11bb8023b5Sdarran  * 2. Redistributions in binary form must reproduce the above copyright
12bb8023b5Sdarran  *    notice, this list of conditions and the following disclaimer in the
13bb8023b5Sdarran  *    documentation and/or other materials provided with the distribution.
14bb8023b5Sdarran  *
15bb8023b5Sdarran  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16bb8023b5Sdarran  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17bb8023b5Sdarran  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18bb8023b5Sdarran  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
19bb8023b5Sdarran  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20bb8023b5Sdarran  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21bb8023b5Sdarran  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22bb8023b5Sdarran  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23bb8023b5Sdarran  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24bb8023b5Sdarran  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25bb8023b5Sdarran  * SUCH DAMAGE.
26bb8023b5Sdarran  *
27*ba2539a9Schs  * $FreeBSD: head/sys/cddl/dev/dtrace/dtrace_test.c 258622 2013-11-26 08:46:27Z avg $
28bb8023b5Sdarran  *
29bb8023b5Sdarran  */
30bb8023b5Sdarran #include <sys/cdefs.h>
31bb8023b5Sdarran #include <sys/types.h>
32bb8023b5Sdarran #include <sys/param.h>
33*ba2539a9Schs #include <sys/systm.h>
34*ba2539a9Schs 
35bb8023b5Sdarran #include <sys/conf.h>
36bb8023b5Sdarran #include <sys/kernel.h>
37bb8023b5Sdarran #include <sys/module.h>
38*ba2539a9Schs #include <sys/sdt.h>
39*ba2539a9Schs #include <sys/sysctl.h>
40bb8023b5Sdarran #include <sys/vnode.h>
41bb8023b5Sdarran 
42*ba2539a9Schs SDT_PROVIDER_DEFINE(test);
43*ba2539a9Schs 
44*ba2539a9Schs SDT_PROBE_DEFINE7(test, , , sdttest, "int", "int", "int", "int", "int",
45*ba2539a9Schs     "int", "int");
46*ba2539a9Schs 
47bb8023b5Sdarran /*
48bb8023b5Sdarran  * These are variables that the DTrace test suite references in the
49bb8023b5Sdarran  * Solaris kernel. We define them here so that the tests function
50bb8023b5Sdarran  * unaltered.
51bb8023b5Sdarran  */
52bb8023b5Sdarran int	kmem_flags;
53bb8023b5Sdarran 
54bb8023b5Sdarran typedef struct vnode vnode_t;
55bb8023b5Sdarran vnode_t dummy;
56bb8023b5Sdarran vnode_t *rootvp = &dummy;
57bb8023b5Sdarran 
58*ba2539a9Schs /*
59*ba2539a9Schs  * Test SDT probes with more than 5 arguments. On amd64, such probes require
60*ba2539a9Schs  * special handling since only the first 5 arguments will be passed to
61*ba2539a9Schs  * dtrace_probe() in registers; the rest must be fetched off the stack.
62*ba2539a9Schs  */
63*ba2539a9Schs static int
dtrace_test_sdttest(SYSCTL_HANDLER_ARGS)64*ba2539a9Schs dtrace_test_sdttest(SYSCTL_HANDLER_ARGS)
65*ba2539a9Schs {
66*ba2539a9Schs 	int val, error;
67*ba2539a9Schs 
68*ba2539a9Schs 	val = 0;
69*ba2539a9Schs 	error = sysctl_handle_int(oidp, &val, 0, req);
70*ba2539a9Schs 	if (error || req->newptr == NULL)
71*ba2539a9Schs 		return (error);
72*ba2539a9Schs 	else if (val == 0)
73*ba2539a9Schs 		return (0);
74*ba2539a9Schs 
75*ba2539a9Schs 	SDT_PROBE7(test, , , sdttest, 1, 2, 3, 4, 5, 6, 7);
76*ba2539a9Schs 
77*ba2539a9Schs 	return (error);
78*ba2539a9Schs }
79*ba2539a9Schs 
80*ba2539a9Schs static SYSCTL_NODE(_debug, OID_AUTO, dtracetest, CTLFLAG_RD, 0, "");
81*ba2539a9Schs 
82*ba2539a9Schs SYSCTL_PROC(_debug_dtracetest, OID_AUTO, sdttest, CTLTYPE_INT | CTLFLAG_RW,
83*ba2539a9Schs     NULL, 0, dtrace_test_sdttest, "I", "Trigger the SDT test probe");
84*ba2539a9Schs 
85bb8023b5Sdarran static int
dtrace_test_modevent(module_t mod,int type,void * data)86bb8023b5Sdarran dtrace_test_modevent(module_t mod, int type, void *data)
87bb8023b5Sdarran {
88bb8023b5Sdarran 	int error = 0;
89bb8023b5Sdarran 
90bb8023b5Sdarran 	switch (type) {
91bb8023b5Sdarran 	case MOD_LOAD:
92bb8023b5Sdarran 		break;
93bb8023b5Sdarran 
94bb8023b5Sdarran 	case MOD_UNLOAD:
95bb8023b5Sdarran 		break;
96bb8023b5Sdarran 
97bb8023b5Sdarran 	case MOD_SHUTDOWN:
98bb8023b5Sdarran 		break;
99bb8023b5Sdarran 
100bb8023b5Sdarran 	default:
101bb8023b5Sdarran 		error = EOPNOTSUPP;
102bb8023b5Sdarran 		break;
103bb8023b5Sdarran 
104bb8023b5Sdarran 	}
105bb8023b5Sdarran 	return (error);
106bb8023b5Sdarran }
107bb8023b5Sdarran 
108bb8023b5Sdarran DEV_MODULE(dtrace_test, dtrace_test_modevent, NULL);
109bb8023b5Sdarran MODULE_VERSION(dtrace_test, 1);
110bb8023b5Sdarran MODULE_DEPEND(dtrace_test, dtraceall, 1, 1, 1);
111