1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
23 */
24
25 #ifndef _SYS_SDT_H
26 #define _SYS_SDT_H
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #ifndef _KERNEL
33
34 #define DTRACE_PROBE(provider, name) { \
35 extern void __dtrace_##provider##___##name(void); \
36 __dtrace_##provider##___##name(); \
37 }
38
39 #define DTRACE_PROBE1(provider, name, arg1) { \
40 extern void __dtrace_##provider##___##name(unsigned long); \
41 __dtrace_##provider##___##name((unsigned long)arg1); \
42 }
43
44 #define DTRACE_PROBE2(provider, name, arg1, arg2) { \
45 extern void __dtrace_##provider##___##name(unsigned long, \
46 unsigned long); \
47 __dtrace_##provider##___##name((unsigned long)arg1, \
48 (unsigned long)arg2); \
49 }
50
51 #define DTRACE_PROBE3(provider, name, arg1, arg2, arg3) { \
52 extern void __dtrace_##provider##___##name(unsigned long, \
53 unsigned long, unsigned long); \
54 __dtrace_##provider##___##name((unsigned long)arg1, \
55 (unsigned long)arg2, (unsigned long)arg3); \
56 }
57
58 #define DTRACE_PROBE4(provider, name, arg1, arg2, arg3, arg4) { \
59 extern void __dtrace_##provider##___##name(unsigned long, \
60 unsigned long, unsigned long, unsigned long); \
61 __dtrace_##provider##___##name((unsigned long)arg1, \
62 (unsigned long)arg2, (unsigned long)arg3, \
63 (unsigned long)arg4); \
64 }
65
66 #define DTRACE_PROBE5(provider, name, arg1, arg2, arg3, arg4, arg5) { \
67 extern void __dtrace_##provider##___##name(unsigned long, \
68 unsigned long, unsigned long, unsigned long, unsigned long);\
69 __dtrace_##provider##___##name((unsigned long)arg1, \
70 (unsigned long)arg2, (unsigned long)arg3, \
71 (unsigned long)arg4, (unsigned long)arg5); \
72 }
73
74 #else /* _KERNEL */
75
76 #define DTRACE_PROBE(name) { \
77 extern void __dtrace_probe_##name(void); \
78 __dtrace_probe_##name(); \
79 }
80
81 #define DTRACE_PROBE1(name, type1, arg1) { \
82 extern void __dtrace_probe_##name(uintptr_t); \
83 __dtrace_probe_##name((uintptr_t)(arg1)); \
84 }
85
86 #define DTRACE_PROBE2(name, type1, arg1, type2, arg2) { \
87 extern void __dtrace_probe_##name(uintptr_t, uintptr_t); \
88 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2)); \
89 }
90
91 #define DTRACE_PROBE3(name, type1, arg1, type2, arg2, type3, arg3) { \
92 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, uintptr_t); \
93 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
94 (uintptr_t)(arg3)); \
95 }
96
97 #define DTRACE_PROBE4(name, type1, arg1, type2, arg2, \
98 type3, arg3, type4, arg4) { \
99 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
100 uintptr_t, uintptr_t); \
101 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
102 (uintptr_t)(arg3), (uintptr_t)(arg4)); \
103 }
104
105 #define DTRACE_PROBE5(name, type1, arg1, type2, arg2, \
106 type3, arg3, type4, arg4, type5, arg5) { \
107 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
108 uintptr_t, uintptr_t, uintptr_t); \
109 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
110 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5)); \
111 }
112
113 #define DTRACE_PROBE6(name, type1, arg1, type2, arg2, \
114 type3, arg3, type4, arg4, type5, arg5, type6, arg6) { \
115 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
116 uintptr_t, uintptr_t, uintptr_t, uintptr_t); \
117 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
118 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5), \
119 (uintptr_t)(arg6)); \
120 }
121
122 #define DTRACE_PROBE7(name, type1, arg1, type2, arg2, type3, arg3, \
123 type4, arg4, type5, arg5, type6, arg6, type7, arg7) { \
124 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
125 uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); \
126 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
127 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5), \
128 (uintptr_t)(arg6), (uintptr_t)(arg7)); \
129 }
130
131 #define DTRACE_PROBE8(name, type1, arg1, type2, arg2, type3, arg3, \
132 type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) { \
133 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
134 uintptr_t, uintptr_t, uintptr_t, uintptr_t, \
135 uintptr_t, uintptr_t); \
136 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
137 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5), \
138 (uintptr_t)(arg6), (uintptr_t)(arg7), (uintptr_t)(arg8)); \
139 }
140
141 #define DTRACE_SCHED(name) \
142 DTRACE_PROBE(__sched_##name);
143
144 #define DTRACE_SCHED1(name, type1, arg1) \
145 DTRACE_PROBE1(__sched_##name, type1, arg1);
146
147 #define DTRACE_SCHED2(name, type1, arg1, type2, arg2) \
148 DTRACE_PROBE2(__sched_##name, type1, arg1, type2, arg2);
149
150 #define DTRACE_SCHED3(name, type1, arg1, type2, arg2, type3, arg3) \
151 DTRACE_PROBE3(__sched_##name, type1, arg1, type2, arg2, type3, arg3);
152
153 #define DTRACE_SCHED4(name, type1, arg1, type2, arg2, \
154 type3, arg3, type4, arg4) \
155 DTRACE_PROBE4(__sched_##name, type1, arg1, type2, arg2, \
156 type3, arg3, type4, arg4);
157
158 #define DTRACE_PROC(name) \
159 DTRACE_PROBE(__proc_##name);
160
161 #define DTRACE_PROC1(name, type1, arg1) \
162 DTRACE_PROBE1(__proc_##name, type1, arg1);
163
164 #define DTRACE_PROC2(name, type1, arg1, type2, arg2) \
165 DTRACE_PROBE2(__proc_##name, type1, arg1, type2, arg2);
166
167 #define DTRACE_PROC3(name, type1, arg1, type2, arg2, type3, arg3) \
168 DTRACE_PROBE3(__proc_##name, type1, arg1, type2, arg2, type3, arg3);
169
170 #define DTRACE_PROC4(name, type1, arg1, type2, arg2, \
171 type3, arg3, type4, arg4) \
172 DTRACE_PROBE4(__proc_##name, type1, arg1, type2, arg2, \
173 type3, arg3, type4, arg4);
174
175 #define DTRACE_IO(name) \
176 DTRACE_PROBE(__io_##name);
177
178 #define DTRACE_IO1(name, type1, arg1) \
179 DTRACE_PROBE1(__io_##name, type1, arg1);
180
181 #define DTRACE_IO2(name, type1, arg1, type2, arg2) \
182 DTRACE_PROBE2(__io_##name, type1, arg1, type2, arg2);
183
184 #define DTRACE_IO3(name, type1, arg1, type2, arg2, type3, arg3) \
185 DTRACE_PROBE3(__io_##name, type1, arg1, type2, arg2, type3, arg3);
186
187 #define DTRACE_IO4(name, type1, arg1, type2, arg2, \
188 type3, arg3, type4, arg4) \
189 DTRACE_PROBE4(__io_##name, type1, arg1, type2, arg2, \
190 type3, arg3, type4, arg4);
191
192 #define DTRACE_ISCSI_2(name, type1, arg1, type2, arg2) \
193 DTRACE_PROBE2(__iscsi_##name, type1, arg1, type2, arg2);
194
195 #define DTRACE_ISCSI_3(name, type1, arg1, type2, arg2, type3, arg3) \
196 DTRACE_PROBE3(__iscsi_##name, type1, arg1, type2, arg2, type3, arg3);
197
198 #define DTRACE_ISCSI_4(name, type1, arg1, type2, arg2, \
199 type3, arg3, type4, arg4) \
200 DTRACE_PROBE4(__iscsi_##name, type1, arg1, type2, arg2, \
201 type3, arg3, type4, arg4);
202
203 #define DTRACE_ISCSI_5(name, type1, arg1, type2, arg2, \
204 type3, arg3, type4, arg4, type5, arg5) \
205 DTRACE_PROBE5(__iscsi_##name, type1, arg1, type2, arg2, \
206 type3, arg3, type4, arg4, type5, arg5);
207
208 #define DTRACE_ISCSI_6(name, type1, arg1, type2, arg2, \
209 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
210 DTRACE_PROBE6(__iscsi_##name, type1, arg1, type2, arg2, \
211 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
212
213 #define DTRACE_ISCSI_7(name, type1, arg1, type2, arg2, \
214 type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7) \
215 DTRACE_PROBE7(__iscsi_##name, type1, arg1, type2, arg2, \
216 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
217 type7, arg7);
218
219 #define DTRACE_ISCSI_8(name, type1, arg1, type2, arg2, \
220 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
221 type7, arg7, type8, arg8) \
222 DTRACE_PROBE8(__iscsi_##name, type1, arg1, type2, arg2, \
223 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
224 type7, arg7, type8, arg8);
225
226 #define DTRACE_NFSV3_3(name, type1, arg1, type2, arg2, \
227 type3, arg3) \
228 DTRACE_PROBE3(__nfsv3_##name, type1, arg1, type2, arg2, \
229 type3, arg3);
230 #define DTRACE_NFSV3_4(name, type1, arg1, type2, arg2, \
231 type3, arg3, type4, arg4) \
232 DTRACE_PROBE4(__nfsv3_##name, type1, arg1, type2, arg2, \
233 type3, arg3, type4, arg4);
234
235 #define DTRACE_NFSV4_1(name, type1, arg1) \
236 DTRACE_PROBE1(__nfsv4_##name, type1, arg1);
237
238 #define DTRACE_NFSV4_2(name, type1, arg1, type2, arg2) \
239 DTRACE_PROBE2(__nfsv4_##name, type1, arg1, type2, arg2);
240
241 #define DTRACE_NFSV4_3(name, type1, arg1, type2, arg2, type3, arg3) \
242 DTRACE_PROBE3(__nfsv4_##name, type1, arg1, type2, arg2, type3, arg3);
243
244 #define DTRACE_SMB_1(name, type1, arg1) \
245 DTRACE_PROBE1(__smb_##name, type1, arg1);
246
247 #define DTRACE_SMB_2(name, type1, arg1, type2, arg2) \
248 DTRACE_PROBE2(__smb_##name, type1, arg1, type2, arg2);
249
250 #define DTRACE_IP(name) \
251 DTRACE_PROBE(__ip_##name);
252
253 #define DTRACE_IP1(name, type1, arg1) \
254 DTRACE_PROBE1(__ip_##name, type1, arg1);
255
256 #define DTRACE_IP2(name, type1, arg1, type2, arg2) \
257 DTRACE_PROBE2(__ip_##name, type1, arg1, type2, arg2);
258
259 #define DTRACE_IP3(name, type1, arg1, type2, arg2, type3, arg3) \
260 DTRACE_PROBE3(__ip_##name, type1, arg1, type2, arg2, type3, arg3);
261
262 #define DTRACE_IP4(name, type1, arg1, type2, arg2, \
263 type3, arg3, type4, arg4) \
264 DTRACE_PROBE4(__ip_##name, type1, arg1, type2, arg2, \
265 type3, arg3, type4, arg4);
266
267 #define DTRACE_IP5(name, type1, arg1, type2, arg2, \
268 type3, arg3, type4, arg4, type5, arg5) \
269 DTRACE_PROBE5(__ip_##name, type1, arg1, type2, arg2, \
270 type3, arg3, type4, arg4, type5, arg5);
271
272 #define DTRACE_IP6(name, type1, arg1, type2, arg2, \
273 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
274 DTRACE_PROBE6(__ip_##name, type1, arg1, type2, arg2, \
275 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
276
277 #define DTRACE_IP7(name, type1, arg1, type2, arg2, type3, arg3, \
278 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \
279 DTRACE_PROBE7(__ip_##name, type1, arg1, type2, arg2, \
280 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
281 type7, arg7);
282
283 #define DTRACE_TCP(name) \
284 DTRACE_PROBE(__tcp_##name);
285
286 #define DTRACE_TCP1(name, type1, arg1) \
287 DTRACE_PROBE1(__tcp_##name, type1, arg1);
288
289 #define DTRACE_TCP2(name, type1, arg1, type2, arg2) \
290 DTRACE_PROBE2(__tcp_##name, type1, arg1, type2, arg2);
291
292 #define DTRACE_TCP3(name, type1, arg1, type2, arg2, type3, arg3) \
293 DTRACE_PROBE3(__tcp_##name, type1, arg1, type2, arg2, type3, arg3);
294
295 #define DTRACE_TCP4(name, type1, arg1, type2, arg2, \
296 type3, arg3, type4, arg4) \
297 DTRACE_PROBE4(__tcp_##name, type1, arg1, type2, arg2, \
298 type3, arg3, type4, arg4);
299
300 #define DTRACE_TCP5(name, type1, arg1, type2, arg2, \
301 type3, arg3, type4, arg4, type5, arg5) \
302 DTRACE_PROBE5(__tcp_##name, type1, arg1, type2, arg2, \
303 type3, arg3, type4, arg4, type5, arg5);
304
305 #define DTRACE_TCP6(name, type1, arg1, type2, arg2, \
306 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
307 DTRACE_PROBE6(__tcp_##name, type1, arg1, type2, arg2, \
308 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
309
310 #define DTRACE_UDP(name) \
311 DTRACE_PROBE(__udp_##name);
312
313 #define DTRACE_UDP1(name, type1, arg1) \
314 DTRACE_PROBE1(__udp_##name, type1, arg1);
315
316 #define DTRACE_UDP2(name, type1, arg1, type2, arg2) \
317 DTRACE_PROBE2(__udp_##name, type1, arg1, type2, arg2);
318
319 #define DTRACE_UDP3(name, type1, arg1, type2, arg2, type3, arg3) \
320 DTRACE_PROBE3(__udp_##name, type1, arg1, type2, arg2, type3, arg3);
321
322 #define DTRACE_UDP4(name, type1, arg1, type2, arg2, \
323 type3, arg3, type4, arg4) \
324 DTRACE_PROBE4(__udp_##name, type1, arg1, type2, arg2, \
325 type3, arg3, type4, arg4);
326
327 #define DTRACE_UDP5(name, type1, arg1, type2, arg2, \
328 type3, arg3, type4, arg4, type5, arg5) \
329 DTRACE_PROBE5(__udp_##name, type1, arg1, type2, arg2, \
330 type3, arg3, type4, arg4, type5, arg5);
331
332 #define DTRACE_DCCP(name) \
333 DTRACE_PROBE(__dccp_##name);
334
335 #define DTRACE_DCCP1(name, type1, arg1) \
336 DTRACE_PROBE1(__dccp_##name, type1, arg1);
337
338 #define DTRACE_DCCP2(name, type1, arg1, type2, arg2) \
339 DTRACE_PROBE2(__dccp_##name, type1, arg1, type2, arg2);
340
341 #define DTRACE_DCCP3(name, type1, arg1, type2, arg2, type3, arg3) \
342 DTRACE_PROBE3(__dccp_##name, type1, arg1, type2, arg2, type3, arg3);
343
344 #define DTRACE_DCCP4(name, type1, arg1, type2, arg2, \
345 type3, arg3, type4, arg4) \
346 DTRACE_PROBE4(__dccp_##name, type1, arg1, type2, arg2, \
347 type3, arg3, type4, arg4);
348
349 #define DTRACE_DCCP5(name, type1, arg1, type2, arg2, \
350 type3, arg3, type4, arg4, type5, arg5) \
351 DTRACE_PROBE5(__dccp_##name, type1, arg1, type2, arg2, \
352 type3, arg3, type4, arg4, type5, arg5);
353
354 #define DTRACE_DCCP6(name, type1, arg1, type2, arg2, \
355 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
356 DTRACE_PROBE6(__dccp_##name, type1, arg1, type2, arg2, \
357 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
358
359
360 #define DTRACE_SYSEVENT2(name, type1, arg1, type2, arg2) \
361 DTRACE_PROBE2(__sysevent_##name, type1, arg1, type2, arg2);
362
363 #define DTRACE_XPV(name) \
364 DTRACE_PROBE(__xpv_##name);
365
366 #define DTRACE_XPV1(name, type1, arg1) \
367 DTRACE_PROBE1(__xpv_##name, type1, arg1);
368
369 #define DTRACE_XPV2(name, type1, arg1, type2, arg2) \
370 DTRACE_PROBE2(__xpv_##name, type1, arg1, type2, arg2);
371
372 #define DTRACE_XPV3(name, type1, arg1, type2, arg2, type3, arg3) \
373 DTRACE_PROBE3(__xpv_##name, type1, arg1, type2, arg2, type3, arg3);
374
375 #define DTRACE_XPV4(name, type1, arg1, type2, arg2, type3, arg3, \
376 type4, arg4) \
377 DTRACE_PROBE4(__xpv_##name, type1, arg1, type2, arg2, \
378 type3, arg3, type4, arg4);
379
380 #define DTRACE_FC_1(name, type1, arg1) \
381 DTRACE_PROBE1(__fc_##name, type1, arg1);
382
383 #define DTRACE_FC_2(name, type1, arg1, type2, arg2) \
384 DTRACE_PROBE2(__fc_##name, type1, arg1, type2, arg2);
385
386 #define DTRACE_FC_3(name, type1, arg1, type2, arg2, type3, arg3) \
387 DTRACE_PROBE3(__fc_##name, type1, arg1, type2, arg2, type3, arg3);
388
389 #define DTRACE_FC_4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \
390 DTRACE_PROBE4(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \
391 type4, arg4);
392
393 #define DTRACE_FC_5(name, type1, arg1, type2, arg2, type3, arg3, \
394 type4, arg4, type5, arg5) \
395 DTRACE_PROBE5(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \
396 type4, arg4, type5, arg5);
397
398 #define DTRACE_SRP_1(name, type1, arg1) \
399 DTRACE_PROBE1(__srp_##name, type1, arg1);
400
401 #define DTRACE_SRP_2(name, type1, arg1, type2, arg2) \
402 DTRACE_PROBE2(__srp_##name, type1, arg1, type2, arg2);
403
404 #define DTRACE_SRP_3(name, type1, arg1, type2, arg2, type3, arg3) \
405 DTRACE_PROBE3(__srp_##name, type1, arg1, type2, arg2, type3, arg3);
406
407 #define DTRACE_SRP_4(name, type1, arg1, type2, arg2, type3, arg3, \
408 type4, arg4) \
409 DTRACE_PROBE4(__srp_##name, type1, arg1, type2, arg2, \
410 type3, arg3, type4, arg4);
411
412 #define DTRACE_SRP_5(name, type1, arg1, type2, arg2, type3, arg3, \
413 type4, arg4, type5, arg5) \
414 DTRACE_PROBE5(__srp_##name, type1, arg1, type2, arg2, \
415 type3, arg3, type4, arg4, type5, arg5);
416
417 #define DTRACE_SRP_6(name, type1, arg1, type2, arg2, type3, arg3, \
418 type4, arg4, type5, arg5, type6, arg6) \
419 DTRACE_PROBE6(__srp_##name, type1, arg1, type2, arg2, \
420 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
421
422 #define DTRACE_SRP_7(name, type1, arg1, type2, arg2, type3, arg3, \
423 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \
424 DTRACE_PROBE7(__srp_##name, type1, arg1, type2, arg2, \
425 type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7);
426
427 #define DTRACE_SRP_8(name, type1, arg1, type2, arg2, type3, arg3, \
428 type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) \
429 DTRACE_PROBE8(__srp_##name, type1, arg1, type2, arg2, \
430 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
431 type7, arg7, type8, arg8);
432
433 #endif /* _KERNEL */
434
435 extern const char *sdt_prefix;
436
437 typedef struct sdt_probedesc {
438 char *sdpd_name; /* name of this probe */
439 unsigned long sdpd_offset; /* offset of call in text */
440 struct sdt_probedesc *sdpd_next; /* next static probe */
441 } sdt_probedesc_t;
442
443 #ifdef __cplusplus
444 }
445 #endif
446
447 #endif /* _SYS_SDT_H */