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