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 333 #define DTRACE_SYSEVENT2(name, type1, arg1, type2, arg2) \ 334 DTRACE_PROBE2(__sysevent_##name, type1, arg1, type2, arg2); 335 336 #define DTRACE_XPV(name) \ 337 DTRACE_PROBE(__xpv_##name); 338 339 #define DTRACE_XPV1(name, type1, arg1) \ 340 DTRACE_PROBE1(__xpv_##name, type1, arg1); 341 342 #define DTRACE_XPV2(name, type1, arg1, type2, arg2) \ 343 DTRACE_PROBE2(__xpv_##name, type1, arg1, type2, arg2); 344 345 #define DTRACE_XPV3(name, type1, arg1, type2, arg2, type3, arg3) \ 346 DTRACE_PROBE3(__xpv_##name, type1, arg1, type2, arg2, type3, arg3); 347 348 #define DTRACE_XPV4(name, type1, arg1, type2, arg2, type3, arg3, \ 349 type4, arg4) \ 350 DTRACE_PROBE4(__xpv_##name, type1, arg1, type2, arg2, \ 351 type3, arg3, type4, arg4); 352 353 #define DTRACE_FC_1(name, type1, arg1) \ 354 DTRACE_PROBE1(__fc_##name, type1, arg1); 355 356 #define DTRACE_FC_2(name, type1, arg1, type2, arg2) \ 357 DTRACE_PROBE2(__fc_##name, type1, arg1, type2, arg2); 358 359 #define DTRACE_FC_3(name, type1, arg1, type2, arg2, type3, arg3) \ 360 DTRACE_PROBE3(__fc_##name, type1, arg1, type2, arg2, type3, arg3); 361 362 #define DTRACE_FC_4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \ 363 DTRACE_PROBE4(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \ 364 type4, arg4); 365 366 #define DTRACE_FC_5(name, type1, arg1, type2, arg2, type3, arg3, \ 367 type4, arg4, type5, arg5) \ 368 DTRACE_PROBE5(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \ 369 type4, arg4, type5, arg5); 370 371 #define DTRACE_SRP_1(name, type1, arg1) \ 372 DTRACE_PROBE1(__srp_##name, type1, arg1); 373 374 #define DTRACE_SRP_2(name, type1, arg1, type2, arg2) \ 375 DTRACE_PROBE2(__srp_##name, type1, arg1, type2, arg2); 376 377 #define DTRACE_SRP_3(name, type1, arg1, type2, arg2, type3, arg3) \ 378 DTRACE_PROBE3(__srp_##name, type1, arg1, type2, arg2, type3, arg3); 379 380 #define DTRACE_SRP_4(name, type1, arg1, type2, arg2, type3, arg3, \ 381 type4, arg4) \ 382 DTRACE_PROBE4(__srp_##name, type1, arg1, type2, arg2, \ 383 type3, arg3, type4, arg4); 384 385 #define DTRACE_SRP_5(name, type1, arg1, type2, arg2, type3, arg3, \ 386 type4, arg4, type5, arg5) \ 387 DTRACE_PROBE5(__srp_##name, type1, arg1, type2, arg2, \ 388 type3, arg3, type4, arg4, type5, arg5); 389 390 #define DTRACE_SRP_6(name, type1, arg1, type2, arg2, type3, arg3, \ 391 type4, arg4, type5, arg5, type6, arg6) \ 392 DTRACE_PROBE6(__srp_##name, type1, arg1, type2, arg2, \ 393 type3, arg3, type4, arg4, type5, arg5, type6, arg6); 394 395 #define DTRACE_SRP_7(name, type1, arg1, type2, arg2, type3, arg3, \ 396 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \ 397 DTRACE_PROBE7(__srp_##name, type1, arg1, type2, arg2, \ 398 type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7); 399 400 #define DTRACE_SRP_8(name, type1, arg1, type2, arg2, type3, arg3, \ 401 type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) \ 402 DTRACE_PROBE8(__srp_##name, type1, arg1, type2, arg2, \ 403 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \ 404 type7, arg7, type8, arg8); 405 406 #endif /* _KERNEL */ 407 408 extern const char *sdt_prefix; 409 410 typedef struct sdt_probedesc { 411 char *sdpd_name; /* name of this probe */ 412 unsigned long sdpd_offset; /* offset of call in text */ 413 struct sdt_probedesc *sdpd_next; /* next static probe */ 414 } sdt_probedesc_t; 415 416 #ifdef __cplusplus 417 } 418 #endif 419 420 #endif /* _SYS_SDT_H */