xref: /xnu-8020.121.3/osfmk/mach/machine/sdt.h (revision fdd8201d7b966f0c3ea610489d29bd841d358941)
1 /*
2  * Copyright (c) 2007-2021 Apple Inc. All rights reserved.
3  */
4 /*
5  * CDDL HEADER START
6  *
7  * The contents of this file are subject to the terms of the
8  * Common Development and Distribution License, Version 1.0 only
9  * (the "License").  You may not use this file except in compliance
10  * with the License.
11  *
12  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
13  * or http://www.opensolaris.org/os/licensing.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  *
17  * When distributing Covered Code, include this CDDL HEADER in each
18  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
19  * If applicable, add the following below this CDDL HEADER, with the
20  * fields enclosed by brackets "[]" replaced with your own identifying
21  * information: Portions Copyright [yyyy] [name of copyright owner]
22  *
23  * CDDL HEADER END
24  */
25 /*
26  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
27  * Use is subject to license terms.
28  */
29 
30 #ifndef _MACH_MACHINE_SYS_SDT_H
31 #define _MACH_MACHINE_SYS_SDT_H
32 
33 #include <mach/machine/sdt_isa.h>
34 
35 #ifdef KERNEL
36 
37 #if CONFIG_DTRACE
38 
39 /*
40  * The following macros are used to create static probes. The argument types
41  * should be no greater than uintptr_t in size each. The behavior of larger
42  * types is undefined.
43  */
44 
45 #define DTRACE_PROBE(provider, name) {                                                          \
46 	DTRACE_CALL0ARGS(provider, name)                                                        \
47 }
48 
49 #define DTRACE_PROBE1(provider, name, arg0) {                                                   \
50 	uintptr_t __dtrace_args[ARG1_EXTENT] __attribute__ ((aligned (16)));                    \
51 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
52 	DTRACE_CALL1ARG(provider, name)                                                         \
53 }
54 
55 #define DTRACE_PROBE2(provider, name, arg0, arg1) {                                             \
56 	uintptr_t __dtrace_args[ARGS2_EXTENT] __attribute__ ((aligned (16)));                   \
57 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
58 	__dtrace_args[1] = (uintptr_t)(arg1);                                                             \
59 	DTRACE_CALL2ARGS(provider, name)                                                        \
60 }
61 
62 #define DTRACE_PROBE3(provider, name, arg0, arg1, arg2) {                                       \
63 	uintptr_t __dtrace_args[ARGS3_EXTENT] __attribute__ ((aligned (16)));                   \
64 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
65 	__dtrace_args[1] = (uintptr_t)(arg1);                                                             \
66 	__dtrace_args[2] = (uintptr_t)(arg2);                                                             \
67 	DTRACE_CALL3ARGS(provider, name)                                                        \
68 }
69 
70 #define DTRACE_PROBE4(provider, name, arg0, arg1, arg2, arg3) {                                 \
71 	uintptr_t __dtrace_args[ARGS4_EXTENT] __attribute__ ((aligned (16)));                   \
72 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
73 	__dtrace_args[1] = (uintptr_t)(arg1);                                                             \
74 	__dtrace_args[2] = (uintptr_t)(arg2);                                                             \
75 	__dtrace_args[3] = (uintptr_t)(arg3);                                                             \
76 	DTRACE_CALL4ARGS(provider, name)                                                        \
77 }
78 
79 #define DTRACE_PROBE5(provider, name, arg0, arg1, arg2, arg3, arg4) {                           \
80 	uintptr_t __dtrace_args[ARGS5_EXTENT] __attribute__ ((aligned (16)));                   \
81 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
82 	__dtrace_args[1] = (uintptr_t)(arg1);                                                             \
83 	__dtrace_args[2] = (uintptr_t)(arg2);                                                             \
84 	__dtrace_args[3] = (uintptr_t)(arg3);                                                             \
85 	__dtrace_args[4] = (uintptr_t)(arg4);                                                             \
86 	DTRACE_CALL5ARGS(provider, name)                                                        \
87 }
88 
89 #define DTRACE_PROBE6(provider, name, arg0, arg1, arg2, arg3, arg4, arg5) {                     \
90 	uintptr_t __dtrace_args[ARGS6_EXTENT] __attribute__ ((aligned (16)));                   \
91 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
92 	__dtrace_args[1] = (uintptr_t)(arg1);                                                             \
93 	__dtrace_args[2] = (uintptr_t)(arg2);                                                             \
94 	__dtrace_args[3] = (uintptr_t)(arg3);                                                             \
95 	__dtrace_args[4] = (uintptr_t)(arg4);                                                             \
96 	__dtrace_args[5] = (uintptr_t)(arg5);                                                             \
97 	DTRACE_CALL6ARGS(provider, name)                                                        \
98 }
99 
100 #define DTRACE_PROBE7(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6) {               \
101 	uintptr_t __dtrace_args[ARGS7_EXTENT] __attribute__ ((aligned (16)));                   \
102 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
103 	__dtrace_args[1] = (uintptr_t)(arg1);                                                             \
104 	__dtrace_args[2] = (uintptr_t)(arg2);                                                             \
105 	__dtrace_args[3] = (uintptr_t)(arg3);                                                             \
106 	__dtrace_args[4] = (uintptr_t)(arg4);                                                             \
107 	__dtrace_args[5] = (uintptr_t)(arg5);                                                             \
108 	__dtrace_args[6] = (uintptr_t)(arg6);                                                             \
109 	DTRACE_CALL7ARGS(provider, name)                                                        \
110 }
111 
112 #define DTRACE_PROBE8(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {         \
113 	uintptr_t __dtrace_args[ARGS8_EXTENT] __attribute__ ((aligned (16)));                   \
114 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
115 	__dtrace_args[1] = (uintptr_t)(arg1);                                                             \
116 	__dtrace_args[2] = (uintptr_t)(arg2);                                                             \
117 	__dtrace_args[3] = (uintptr_t)(arg3);                                                             \
118 	__dtrace_args[4] = (uintptr_t)(arg4);                                                             \
119 	__dtrace_args[5] = (uintptr_t)(arg5);                                                             \
120 	__dtrace_args[6] = (uintptr_t)(arg6);                                                             \
121 	__dtrace_args[7] = (uintptr_t)(arg7);                                                             \
122 	DTRACE_CALL8ARGS(provider, name)                                                        \
123 }
124 
125 #define DTRACE_PROBE9(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) {   \
126 	uintptr_t __dtrace_args[ARGS9_EXTENT] __attribute__ ((aligned (16)));                   \
127 	__dtrace_args[0] = (uintptr_t)(arg0);                                                             \
128 	__dtrace_args[1] = (uintptr_t)(arg1);                                                             \
129 	__dtrace_args[2] = (uintptr_t)(arg2);                                                             \
130 	__dtrace_args[3] = (uintptr_t)(arg3);                                                             \
131 	__dtrace_args[4] = (uintptr_t)(arg4);                                                             \
132 	__dtrace_args[5] = (uintptr_t)(arg5);                                                             \
133 	__dtrace_args[6] = (uintptr_t)(arg6);                                                             \
134 	__dtrace_args[7] = (uintptr_t)(arg7);                                                             \
135 	__dtrace_args[8] = (uintptr_t)(arg8);                                                             \
136 	DTRACE_CALL9ARGS(provider, name)                                                        \
137 }
138 
139 #define DTRACE_PROBE10(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {    \
140 	uintptr_t __dtrace_args[ARGS10_EXTENT] __attribute__ ((aligned (16)));                          \
141 	__dtrace_args[0] = (uintptr_t)(arg0);                                                                     \
142 	__dtrace_args[1] = (uintptr_t)(arg1);                                                                     \
143 	__dtrace_args[2] = (uintptr_t)(arg2);                                                                     \
144 	__dtrace_args[3] = (uintptr_t)(arg3);                                                                     \
145 	__dtrace_args[4] = (uintptr_t)(arg4);                                                                     \
146 	__dtrace_args[5] = (uintptr_t)(arg5);                                                                     \
147 	__dtrace_args[6] = (uintptr_t)(arg6);                                                                     \
148 	__dtrace_args[7] = (uintptr_t)(arg7);                                                                     \
149 	__dtrace_args[8] = (uintptr_t)(arg8);                                                                     \
150 	__dtrace_args[9] = (uintptr_t)(arg9);                                                                     \
151 	DTRACE_CALL10ARGS(provider, name)                                                               \
152 }
153 
154 #else
155 #define DTRACE_PROBE(provider, name) do {} while(0)
156 #define DTRACE_PROBE1(provider, name, arg0) do {} while(0)
157 #define DTRACE_PROBE2(provider, name, arg0, arg1) do {} while(0)
158 #define DTRACE_PROBE3(provider, name, arg0, arg1, arg2) do {} while(0)
159 #define DTRACE_PROBE4(provider, name, arg0, arg1, arg2, arg3) do {} while(0)
160 #define DTRACE_PROBE5(provider, name, arg0, arg1, arg2, arg3, arg4) do {} while(0)
161 #define DTRACE_PROBE6(provider, name, arg0, arg1, arg2, arg3, arg4, arg5) do {} while(0)
162 #define DTRACE_PROBE7(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6) do {} while(0)
163 #define DTRACE_PROBE8(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) do {} while(0)
164 #define DTRACE_PROBE9(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) do {} while(0)
165 #define DTRACE_PROBE10(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) do {} while(0)
166 
167 #endif /* CONFIG_DTRACE */
168 
169 #define DTRACE_SCHED(name)                                              \
170 	DTRACE_PROBE(__sched_, name);
171 
172 #define DTRACE_SCHED1(name, type1, arg1)                                \
173 	DTRACE_PROBE1(__sched_, name, arg1);
174 
175 #define DTRACE_SCHED2(name, type1, arg1, type2, arg2)                   \
176 	DTRACE_PROBE2(__sched_, name, arg1, arg2);
177 
178 #define DTRACE_SCHED3(name, type1, arg1, type2, arg2, type3, arg3)      \
179 	DTRACE_PROBE3(__sched_, name, arg1, arg2, arg3);
180 
181 #define DTRACE_SCHED4(name, type1, arg1, type2, arg2,                   \
182 	    type3, arg3, type4, arg4)                                           \
183 	DTRACE_PROBE4(__sched_, name, arg1, arg2, arg3, arg4);
184 
185 #define DTRACE_SCHED5(name, type1, arg1, type2, arg2,                   \
186 	    type3, arg3, type4, arg4, type5, arg5)                              \
187 	DTRACE_PROBE5(__sched_, name, arg1, arg2, arg3, arg4, arg5, arg6);
188 
189 #define DTRACE_SCHED6(name, type1, arg1, type2, arg2,                   \
190 	    type3, arg3, type4, arg4, type5, arg5, type6, arg6)                 \
191 	DTRACE_PROBE6(__sched_, name, arg1, arg2, arg3, arg4, arg5, arg6);
192 
193 #define DTRACE_PROC(name)                                               \
194 	DTRACE_PROBE(__proc_, name);
195 
196 #define DTRACE_PROC1(name, type1, arg1)                                 \
197 	DTRACE_PROBE1(__proc_, name, arg1);
198 
199 #define DTRACE_PROC2(name, type1, arg1, type2, arg2)                    \
200 	DTRACE_PROBE2(__proc_, name, arg1, arg2);
201 
202 #define DTRACE_PROC3(name, type1, arg1, type2, arg2, type3, arg3)       \
203 	DTRACE_PROBE3(__proc_, name, arg1, arg2, arg3);
204 
205 #define DTRACE_PROC4(name, type1, arg1, type2, arg2,                    \
206 	    type3, arg3, type4, arg4)                                           \
207 	DTRACE_PROBE4(__proc_, name, arg1, arg2, arg3, arg4);
208 
209 #define DTRACE_IO(name)                                                 \
210 	DTRACE_PROBE(__io_, name);
211 
212 #define DTRACE_IO1(name, type1, arg1)                                   \
213 	DTRACE_PROBE1(__io_, name, arg1);
214 
215 #define DTRACE_IO2(name, type1, arg1, type2, arg2)                      \
216 	DTRACE_PROBE2(__io_, name, arg1, arg2);
217 
218 #define DTRACE_IO3(name, type1, arg1, type2, arg2, type3, arg3)         \
219 	DTRACE_PROBE3(__io_, name, arg1, arg2, arg3);
220 
221 #define DTRACE_IO4(name, type1, arg1, type2, arg2,                      \
222 	    type3, arg3, type4, arg4)                                           \
223 	DTRACE_PROBE4(__io_, name, arg1, arg2, arg3, arg4);
224 
225 #define DTRACE_INT5(name, type1, arg1, type2, arg2,                     \
226 	    type3, arg3, type4, arg4, type5, arg5)                                              \
227 	DTRACE_PROBE5(__sdt_, name, arg1, arg2, arg3, arg4, arg5);
228 
229 #define DTRACE_MEMORYSTATUS2(name, type1, arg1, type2, arg2)            \
230 	DTRACE_PROBE2(__sdt_, name, arg1, arg2);
231 
232 #define DTRACE_MEMORYSTATUS3(name, type1, arg1, type2, arg2, type3, arg3)               \
233 	DTRACE_PROBE3(__sdt_, name, arg1, arg2, arg3);
234 
235 #define DTRACE_MEMORYSTATUS4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4)  \
236 	DTRACE_PROBE4(__sdt_, name, arg1, arg2, arg3, arg4);
237 
238 #define DTRACE_MEMORYSTATUS6(name, type1, arg1, type2, arg2,                    \
239 	    type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
240 	DTRACE_PROBE6(__vminfo_, name, arg1, arg2, arg3, arg4, arg5, arg6)
241 
242 #define DTRACE_TMR3(name, type1, arg1, type2, arg2, type3, arg3)                \
243 	DTRACE_PROBE3(__sdt_, name, arg1, arg2, arg3);
244 
245 #define DTRACE_TMR4(name, type1, arg1, arg2, arg3, arg4)                        \
246 	DTRACE_PROBE4(__sdt_, name, arg1, arg2, arg3, arg4);
247 
248 #define DTRACE_TMR5(name, type1, arg1, type2, arg2, type3, arg3, arg4, arg5)    \
249 	DTRACE_PROBE5(__sdt_, name, arg1, arg2, arg3, arg4, arg5);
250 
251 #define DTRACE_TMR6(name, type1, arg1, type2, arg2, type3, arg3, arg4, arg5, arg6) \
252 	DTRACE_PROBE6(__sdt_, name, arg1, arg2, arg3, arg4, arg5, arg6);
253 
254 #define DTRACE_TMR7(name, type1, arg1, type2, arg2, type3, arg3, arg4, arg5, arg6, arg7) \
255 	DTRACE_PROBE7(__sdt_, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
256 
257 #define DTRACE_PHYSLAT3(name, type1, arg1, type2, arg2, type3, arg3)            \
258 	DTRACE_PROBE3(__sdt_, name, arg1, arg2, arg3);
259 
260 #define DTRACE_PHYSLAT4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4)        \
261 	DTRACE_PROBE4(__sdt_, name, arg1, arg2, arg3, arg4);
262 
263 #define DTRACE_PHYSLAT5(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5)  \
264 	DTRACE_PROBE5(__sdt_, name, arg1, arg2, arg3, arg4, arg5);
265 
266 #define DTRACE_MACF(name)                         \
267 	DTRACE_PROBE(__sdt_, name);
268 
269 #define DTRACE_MACF1(name, type1, arg1)                         \
270 	DTRACE_PROBE1(__sdt_, name, arg1);
271 
272 #define DTRACE_MACF2(name, type1, arg1, type2, arg2)            \
273 	DTRACE_PROBE2(__sdt_, name, arg1, arg2);
274 
275 #define DTRACE_MACF3(name, type1, arg1, type2, arg2, type3, arg3)            \
276 	DTRACE_PROBE3(__sdt_, name, arg1, arg2, arg3);
277 
278 #define DTRACE_VM(name)                                                 \
279 	DTRACE_PROBE(__vminfo_, name)
280 
281 #define DTRACE_VM1(name, type1, arg1)                                   \
282 	DTRACE_PROBE1(__vminfo_, name, arg1)
283 
284 #define DTRACE_VM2(name, type1, arg1, type2, arg2)                      \
285 	DTRACE_PROBE2(__vminfo_, name, arg1, arg2)
286 
287 #define DTRACE_VM3(name, type1, arg1, type2, arg2, type3, arg3)         \
288 	DTRACE_PROBE3(__vminfo_, name, arg1, arg2, arg3)
289 
290 #define DTRACE_VM4(name, type1, arg1, type2, arg2,                      \
291 	    type3, arg3, type4, arg4)                                           \
292 	DTRACE_PROBE4(__vminfo_, name, arg1, arg2, arg3, arg4)
293 
294 #define DTRACE_VM5(name, type1, arg1, type2, arg2,                      \
295 	    type3, arg3, type4, arg4, type5, arg5)                              \
296 	DTRACE_PROBE5(__vminfo_, name, arg1, arg2, arg3, arg4, arg5)
297 
298 #define DTRACE_VM6(name, type1, arg1, type2, arg2,                      \
299 	    type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
300 	DTRACE_PROBE6(__vminfo_, name, arg1, arg2, arg3, arg4, arg5, arg6)
301 
302 #define DTRACE_VM7(name, type1, arg1, type2, arg2,                      \
303 	    type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7) \
304 	DTRACE_PROBE7(__vminfo_, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
305 
306 #define DTRACE_VM8(name, type1, arg1, type2, arg2,                      \
307 	    type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) \
308 	DTRACE_PROBE8(__vminfo_, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
309 
310 #define DTRACE_IP(name)                                                 \
311 	DTRACE_PROBE(__ip_, name)
312 
313 #define DTRACE_IP1(name, type1, arg1)                                   \
314 	DTRACE_PROBE1(__ip_, name, arg1)
315 
316 #define DTRACE_IP2(name, type1, arg1, type2, arg2)                      \
317 	DTRACE_PROBE2(__ip_, name, arg1, arg2)
318 
319 #define DTRACE_IP3(name, type1, arg1, type2, arg2, type3, arg3)         \
320 	DTRACE_PROBE3(__ip_, name, arg1, arg2, arg3)
321 
322 #define DTRACE_IP4(name, type1, arg1, type2, arg2,                      \
323 	    type3, arg3, type4, arg4)                                           \
324 	DTRACE_PROBE4(__ip_, name, arg1, arg2, arg3, arg4)
325 
326 #define DTRACE_IP5(name, typ1, arg1, type2, arg2, type3, arg3,          \
327 	    type4, arg4, type5, arg5)                                           \
328 	DTRACE_PROBE5(__ip_, name, arg1, arg2, arg3, arg4, arg5)
329 
330 #define DTRACE_IP6(name, type1, arg1, type2, arg2, type3, arg3,         \
331 	    type4, arg4, type5, arg5, type6, arg6)                               \
332 	DTRACE_PROBE6(__ip_, name, arg1, arg2, arg3, arg4, arg5, arg6)
333 
334 #define DTRACE_IP7(name, type1, arg1, type2, arg2, type3, arg3,         \
335 	    type4, arg4, type5, arg5, type6, arg6, type7, arg7)                 \
336 	DTRACE_PROBE7(__ip_, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
337 
338 #define DTRACE_ROUTE(name)                                              \
339 	DTRACE_PROBE(__route_, name)
340 
341 #define DTRACE_ROUTE1(name, type1, arg1)                                \
342 	DTRACE_PROBE1(__route_, name, arg1)
343 
344 #define DTRACE_ROUTE2(name, type1, arg1, type2, arg2)                   \
345 	DTRACE_PROBE2(__route_, name, arg1, arg2)
346 
347 #define DTRACE_ROUTE3(name, type1, arg1, type2, arg2, type3, arg3)      \
348 	DTRACE_PROBE3(__route_, name, arg1, arg2, arg3)
349 
350 #define DTRACE_ROUTE4(name, type1, arg1, type2, arg2,                   \
351 	    type3, arg3, type4, arg4)                                           \
352 	DTRACE_PROBE4(__route_, name, arg1, arg2, arg3, arg4)
353 
354 #define DTRACE_ROUTE5(name, typ1, arg1, type2, arg2, type3, arg3,       \
355 	    type4, arg4, type5, arg5)                                           \
356 	DTRACE_PROBE5(__route_, name, arg1, arg2, arg3, arg4, arg5)
357 
358 #define DTRACE_ROUTE6(name, type1, arg1, type2, arg2, type3, arg3,      \
359 	    type4, arg4, type5, arg5, type6, arg6)                               \
360 	DTRACE_PROBE6(__route_, name, arg1, arg2, arg3, arg4, arg5, arg6)
361 
362 #define DTRACE_ROUTE7(name, type1, arg1, type2, arg2, type3, arg3,      \
363 	    type4, arg4, type5, arg5, type6, arg6, type7, arg7)                 \
364 	DTRACE_PROBE7(__route_, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
365 
366 #define DTRACE_TCP(name)                                                 \
367 	DTRACE_PROBE(__tcp_, name)
368 
369 #define DTRACE_TCP1(name, type1, arg1)                                   \
370 	DTRACE_PROBE1(__tcp_, name, arg1)
371 
372 #define DTRACE_TCP2(name, type1, arg1, type2, arg2)                      \
373 	DTRACE_PROBE2(__tcp_, name, arg1, arg2)
374 
375 #define DTRACE_TCP3(name, type1, arg1, type2, arg2, type3, arg3)         \
376 	DTRACE_PROBE3(__tcp_, name, arg1, arg2, arg3)
377 
378 #define DTRACE_TCP4(name, type1, arg1, type2, arg2,                      \
379 	    type3, arg3, type4, arg4)                                           \
380 	DTRACE_PROBE4(__tcp_, name, arg1, arg2, arg3, arg4)
381 
382 #define DTRACE_TCP5(name, typ1, arg1, type2, arg2, type3, arg3,          \
383 	    type4, arg4, type5, arg5)                                           \
384 	DTRACE_PROBE5(__tcp_, name, arg1, arg2, arg3, arg4, arg5)
385 
386 #define DTRACE_MPTCP(name)                                              \
387 	DTRACE_PROBE(__mptcp_, name)
388 
389 #define DTRACE_MPTCP1(name, type1, arg1)                                \
390 	DTRACE_PROBE1(__mptcp_, name, arg1)
391 
392 #define DTRACE_MPTCP2(name, type1, arg1, type2, arg2)                   \
393 	DTRACE_PROBE2(__mptcp_, name, arg1, arg2)
394 
395 #define DTRACE_MPTCP3(name, type1, arg1, type2, arg2, type3, arg3)      \
396 	DTRACE_PROBE3(__mptcp_, name, arg1, arg2, arg3)
397 
398 #define DTRACE_MPTCP4(name, type1, arg1, type2, arg2,                   \
399 	    type3, arg3, type4, arg4)                          \
400 	DTRACE_PROBE4(__mptcp_, name, arg1, arg2, arg3, arg4)
401 
402 #define DTRACE_MPTCP5(name, typ1, arg1, type2, arg2, type3, arg3,       \
403 	    type4, arg4, type5, arg5)                         \
404 	DTRACE_PROBE5(__mptcp_, name, arg1, arg2, arg3, arg4, arg5)
405 
406 #define DTRACE_MPTCP6(name, typ1, arg1, type2, arg2, type3, arg3,       \
407 	    type4, arg4, type5, arg5, type6, arg6)            \
408 	DTRACE_PROBE6(__mptcp_, name, arg1, arg2, arg3, arg4, arg5, arg6)
409 
410 #define DTRACE_MPTCP7(name, typ1, arg1, type2, arg2, type3, arg3,       \
411 	    type4, arg4, type5, arg5, type6, arg6,            \
412 	    type7, arg7)                                      \
413 	DTRACE_PROBE7(__mptcp_, name, arg1, arg2, arg3, arg4, arg5,     \
414 	              arg6, arg7)
415 
416 #define DTRACE_FSINFO(name, type, vp)                                   \
417 	DTRACE_PROBE1(__fsinfo_, name, vp)
418 
419 #define DTRACE_FSINFO_IO(name, type1, vp, type2, size)                  \
420 	DTRACE_PROBE2(__fsinfo_, name, vp, size)
421 
422 #define DTRACE_BOOST(name)                                              \
423 	DTRACE_PROBE(__boost_, name);
424 
425 #define DTRACE_BOOST1(name, type1, arg1)                                \
426 	DTRACE_PROBE1(__boost_, name, arg1);
427 
428 #define DTRACE_BOOST2(name, type1, arg1, type2, arg2)                   \
429 	DTRACE_PROBE2(__boost_, name, arg1, arg2);
430 
431 #define DTRACE_BOOST3(name, type1, arg1, type2, arg2, type3, arg3)      \
432 	DTRACE_PROBE3(__boost_, name, arg1, arg2, arg3);
433 
434 #define DTRACE_BOOST4(name, type1, arg1, type2, arg2,                   \
435 	    type3, arg3, type4, arg4)                                           \
436 	DTRACE_PROBE4(__boost_, name, arg1, arg2, arg3, arg4);
437 
438 #define DTRACE_BOOST5(name, type1, arg1, type2, arg2,                   \
439 	    type3, arg3, type4, arg4, type5, arg5)                                              \
440 	DTRACE_PROBE5(__boost_, name, arg1, arg2, arg3, arg4, arg5);
441 
442 #define DTRACE_BOOST6(name, type1, arg1, type2, arg2,                   \
443 	    type3, arg3, type4, arg4, type5, arg5, type6, arg6)                 \
444 	DTRACE_PROBE6(__boost_, name, arg1, arg2, arg3, arg4, arg5, arg6);
445 
446 #if KASAN
447 #define DTRACE_KASAN(name)                                              \
448 	DTRACE_PROBE(__kasan_, name);
449 
450 #define DTRACE_KASAN1(name, type1, arg1)                                \
451 	DTRACE_PROBE1(__kasan_, name, arg1);
452 
453 #define DTRACE_KASAN2(name, type1, arg1, type2, arg2)                   \
454 	DTRACE_PROBE2(__kasan_, name, arg1, arg2);
455 
456 #define DTRACE_KASAN3(name, type1, arg1, type2, arg2, type3, arg3)      \
457 	DTRACE_PROBE3(__kasan_, name, arg1, arg2, arg3);
458 
459 #define DTRACE_KASAN4(name, type1, arg1, type2, arg2,                   \
460 	    type3, arg3, type4, arg4)                                       \
461 	DTRACE_PROBE4(__kasan_, name, arg1, arg2, arg3, arg4);
462 
463 #define DTRACE_KASAN5(name, type1, arg1, type2, arg2,                   \
464 	    type3, arg3, type4, arg4, type5, arg5)                          \
465 	DTRACE_PROBE5(__kasan_, name, arg1, arg2, arg3, arg4, arg5);
466 #endif /* KASAN */
467 
468 #if PRIVATE
469 #define DTRACE_SKYWALK(name)                                            \
470 	DTRACE_PROBE(__skywalk_, name)
471 
472 #define DTRACE_SKYWALK1(name, type1, arg1)                              \
473 	DTRACE_PROBE1(__skywalk_, name, arg1)
474 
475 #define DTRACE_SKYWALK2(name, type1, arg1, type2, arg2)                 \
476 	DTRACE_PROBE2(__skywalk_, name, arg1, arg2)
477 
478 #define DTRACE_SKYWALK3(name, type1, arg1, type2, arg2, type3, arg3)    \
479 	DTRACE_PROBE3(__skywalk_, name, arg1, arg2, arg3)
480 
481 #define DTRACE_SKYWALK4(name, type1, arg1, type2, arg2, type3, arg3,    \
482 	    type4, arg4)                                                \
483 	DTRACE_PROBE4(__skywalk_, name, arg1, arg2, arg3, arg4)
484 
485 #define DTRACE_SKYWALK5(name, type1, arg1, type2, arg2, type3, arg3,    \
486 	    type4, arg4, type5, arg5)                                   \
487 	DTRACE_PROBE5(__skywalk_, name, arg1, arg2, arg3, arg4, arg5)
488 
489 #define DTRACE_SKYWALK6(name, type1, arg1, type2, arg2, type3, arg3,    \
490 	    type4, arg4, type5, arg5, type6, arg6)                      \
491 	DTRACE_PROBE6(__skywalk_, name, arg1, arg2, arg3, arg4, arg5, arg6)
492 
493 #endif /* PRIVATE */
494 
495 #ifdef PRIVATE
496 #define DTRACE_KCOV1(name, type1, arg1)                            \
497 	DTRACE_PROBE1(__kcov_, name, arg1)
498 
499 #endif /* PRIVATE */
500 
501 #ifdef PRIVATE
502 
503 /*
504  * The AppleHV kext uses its own variants of these macros to avoid storing
505  * arguments as intermediate values on the stack (to lessen the overhead).
506  * If/When the mechanism by which SDT probes are generated changes, AppleHV
507  * should be updated too.
508  */
509 #define DTRACE_HV(name)                                            \
510 	DTRACE_PROBE(__hv_, name)
511 
512 #define DTRACE_HV1(name, type1, arg1)                              \
513 	DTRACE_PROBE1(__hv_, name, arg1)
514 
515 #define DTRACE_HV2(name, type1, arg1, type2, arg2)                 \
516 	DTRACE_PROBE2(__hv_, name, arg1, arg2)
517 
518 #define DTRACE_HV3(name, type1, arg1, type2, arg2, type3, arg3)    \
519 	DTRACE_PROBE3(__hv_, name, arg1, arg2, arg3)
520 
521 #define DTRACE_HV4(name, type1, arg1, type2, arg2, type3, arg3,    \
522 	    type4, arg4)                                                \
523 	DTRACE_PROBE4(__hv_, name, arg1, arg2, arg3, arg4)
524 
525 #define DTRACE_HV5(name, type1, arg1, type2, arg2, type3, arg3,    \
526 	    type4, arg4, type5, arg5)                                   \
527 	DTRACE_PROBE5(__hv_, name, arg1, arg2, arg3, arg4, arg5)
528 
529 #define DTRACE_HV6(name, type1, arg1, type2, arg2, type3, arg3,    \
530 	    type4, arg4, type5, arg5, type6, arg6)                      \
531 	DTRACE_PROBE6(__hv_, name, arg1, arg2, arg3, arg4, arg5, arg6)
532 #endif /* PRIVATE */
533 
534 #endif /* KERNEL */
535 
536 #endif  /* _MACH_MACHINE_SYS_SDT_H */
537