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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27#ifndef _MACH_SDT_H 28#define _MACH_SDT_H 29 30#include <mach/machine/sdt.h> 31 32 33#ifdef KERNEL 34 35#if CONFIG_DTRACE 36 37/* 38 * The following macros are used to create static probes. The argument types 39 * should be no greater than uintptr_t in size each. The behavior of larger 40 * types is undefined. 41 */ 42 43#define DTRACE_PROBE(provider, name) { \ 44 DTRACE_CALL0ARGS(provider, name) \ 45} 46 47#define DTRACE_PROBE1(provider, name, arg0) { \ 48 uintptr_t __dtrace_args[ARG1_EXTENT] __attribute__ ((aligned (16))); \ 49 __dtrace_args[0] = (uintptr_t)arg0; \ 50 DTRACE_CALL1ARG(provider, name) \ 51} 52 53#define DTRACE_PROBE2(provider, name, arg0, arg1) { \ 54 uintptr_t __dtrace_args[ARGS2_EXTENT] __attribute__ ((aligned (16))); \ 55 __dtrace_args[0] = (uintptr_t)arg0; \ 56 __dtrace_args[1] = (uintptr_t)arg1; \ 57 DTRACE_CALL2ARGS(provider, name) \ 58} 59 60#define DTRACE_PROBE3(provider, name, arg0, arg1, arg2) { \ 61 uintptr_t __dtrace_args[ARGS3_EXTENT] __attribute__ ((aligned (16))); \ 62 __dtrace_args[0] = (uintptr_t)arg0; \ 63 __dtrace_args[1] = (uintptr_t)arg1; \ 64 __dtrace_args[2] = (uintptr_t)arg2; \ 65 DTRACE_CALL3ARGS(provider, name) \ 66} 67 68#define DTRACE_PROBE4(provider, name, arg0, arg1, arg2, arg3) { \ 69 uintptr_t __dtrace_args[ARGS4_EXTENT] __attribute__ ((aligned (16))); \ 70 __dtrace_args[0] = (uintptr_t)arg0; \ 71 __dtrace_args[1] = (uintptr_t)arg1; \ 72 __dtrace_args[2] = (uintptr_t)arg2; \ 73 __dtrace_args[3] = (uintptr_t)arg3; \ 74 DTRACE_CALL4ARGS(provider, name) \ 75} 76 77#define DTRACE_PROBE5(provider, name, arg0, arg1, arg2, arg3, arg4) { \ 78 uintptr_t __dtrace_args[ARGS5_EXTENT] __attribute__ ((aligned (16))); \ 79 __dtrace_args[0] = (uintptr_t)arg0; \ 80 __dtrace_args[1] = (uintptr_t)arg1; \ 81 __dtrace_args[2] = (uintptr_t)arg2; \ 82 __dtrace_args[3] = (uintptr_t)arg3; \ 83 __dtrace_args[4] = (uintptr_t)arg4; \ 84 DTRACE_CALL5ARGS(provider, name) \ 85} 86 87#define DTRACE_PROBE6(provider, name, arg0, arg1, arg2, arg3, arg4, arg5) { \ 88 uintptr_t __dtrace_args[ARGS6_EXTENT] __attribute__ ((aligned (16))); \ 89 __dtrace_args[0] = (uintptr_t)arg0; \ 90 __dtrace_args[1] = (uintptr_t)arg1; \ 91 __dtrace_args[2] = (uintptr_t)arg2; \ 92 __dtrace_args[3] = (uintptr_t)arg3; \ 93 __dtrace_args[4] = (uintptr_t)arg4; \ 94 __dtrace_args[5] = (uintptr_t)arg5; \ 95 DTRACE_CALL6ARGS(provider, name) \ 96} 97 98#define DTRACE_PROBE7(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6) { \ 99 uintptr_t __dtrace_args[ARGS7_EXTENT] __attribute__ ((aligned (16))); \ 100 __dtrace_args[0] = (uintptr_t)arg0; \ 101 __dtrace_args[1] = (uintptr_t)arg1; \ 102 __dtrace_args[2] = (uintptr_t)arg2; \ 103 __dtrace_args[3] = (uintptr_t)arg3; \ 104 __dtrace_args[4] = (uintptr_t)arg4; \ 105 __dtrace_args[5] = (uintptr_t)arg5; \ 106 __dtrace_args[6] = (uintptr_t)arg6; \ 107 DTRACE_CALL7ARGS(provider, name) \ 108} 109 110#define DTRACE_PROBE8(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) { \ 111 uintptr_t __dtrace_args[ARGS8_EXTENT] __attribute__ ((aligned (16))); \ 112 __dtrace_args[0] = (uintptr_t)arg0; \ 113 __dtrace_args[1] = (uintptr_t)arg1; \ 114 __dtrace_args[2] = (uintptr_t)arg2; \ 115 __dtrace_args[3] = (uintptr_t)arg3; \ 116 __dtrace_args[4] = (uintptr_t)arg4; \ 117 __dtrace_args[5] = (uintptr_t)arg5; \ 118 __dtrace_args[6] = (uintptr_t)arg6; \ 119 __dtrace_args[7] = (uintptr_t)arg7; \ 120 DTRACE_CALL8ARGS(provider, name) \ 121} 122 123#define DTRACE_PROBE9(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) { \ 124 uintptr_t __dtrace_args[ARGS9_EXTENT] __attribute__ ((aligned (16))); \ 125 __dtrace_args[0] = (uintptr_t)arg0; \ 126 __dtrace_args[1] = (uintptr_t)arg1; \ 127 __dtrace_args[2] = (uintptr_t)arg2; \ 128 __dtrace_args[3] = (uintptr_t)arg3; \ 129 __dtrace_args[4] = (uintptr_t)arg4; \ 130 __dtrace_args[5] = (uintptr_t)arg5; \ 131 __dtrace_args[6] = (uintptr_t)arg6; \ 132 __dtrace_args[7] = (uintptr_t)arg7; \ 133 __dtrace_args[8] = (uintptr_t)arg8; \ 134 DTRACE_CALL9ARGS(provider, name) \ 135} 136 137#define DTRACE_PROBE10(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { \ 138 uintptr_t __dtrace_args[ARGS10_EXTENT] __attribute__ ((aligned (16))); \ 139 __dtrace_args[0] = (uintptr_t)arg0; \ 140 __dtrace_args[1] = (uintptr_t)arg1; \ 141 __dtrace_args[2] = (uintptr_t)arg2; \ 142 __dtrace_args[3] = (uintptr_t)arg3; \ 143 __dtrace_args[4] = (uintptr_t)arg4; \ 144 __dtrace_args[5] = (uintptr_t)arg5; \ 145 __dtrace_args[6] = (uintptr_t)arg6; \ 146 __dtrace_args[7] = (uintptr_t)arg7; \ 147 __dtrace_args[8] = (uintptr_t)arg8; \ 148 __dtrace_args[9] = (uintptr_t)arg9; \ 149 DTRACE_CALL10ARGS(provider, name) \ 150} 151 152 153 154#define DTRACE_SCHED(name) \ 155 DTRACE_PROBE(__sched_, name); 156 157#define DTRACE_SCHED1(name, type1, arg1) \ 158 DTRACE_PROBE1(__sched_, name, arg1); 159 160#define DTRACE_SCHED2(name, type1, arg1, type2, arg2) \ 161 DTRACE_PROBE2(__sched_, name, arg1, arg2); 162 163#define DTRACE_SCHED3(name, type1, arg1, type2, arg2, type3, arg3) \ 164 DTRACE_PROBE3(__sched_, name, arg1, arg2, arg3); 165 166#define DTRACE_SCHED4(name, type1, arg1, type2, arg2, \ 167 type3, arg3, type4, arg4) \ 168 DTRACE_PROBE4(__sched_, name, arg1, arg2, arg3, arg4); 169 170#define DTRACE_PROC(name) \ 171 DTRACE_PROBE(__proc_, name); 172 173#define DTRACE_PROC1(name, type1, arg1) \ 174 DTRACE_PROBE1(__proc_, name, arg1); 175 176#define DTRACE_PROC2(name, type1, arg1, type2, arg2) \ 177 DTRACE_PROBE2(__proc_, name, arg1, arg2); 178 179#define DTRACE_PROC3(name, type1, arg1, type2, arg2, type3, arg3) \ 180 DTRACE_PROBE3(__proc_, name, arg1, arg2, arg3); 181 182#define DTRACE_PROC4(name, type1, arg1, type2, arg2, \ 183 type3, arg3, type4, arg4) \ 184 DTRACE_PROBE4(__proc_, name, arg1, arg2, arg3, arg4); 185 186#define DTRACE_IO(name) \ 187 DTRACE_PROBE(__io_, name); 188 189#define DTRACE_IO1(name, type1, arg1) \ 190 DTRACE_PROBE1(__io_, name, arg1); 191 192#define DTRACE_IO2(name, type1, arg1, type2, arg2) \ 193 DTRACE_PROBE2(__io_, name, type1, arg1, type2, arg2); 194 195#define DTRACE_IO3(name, type1, arg1, type2, arg2, type3, arg3) \ 196 DTRACE_PROBE3(__io_, name, arg1, arg2, arg3); 197 198#define DTRACE_IO4(name, type1, arg1, type2, arg2, \ 199 type3, arg3, type4, arg4) \ 200 DTRACE_PROBE4(__io_, name, arg1, arg2, arg3, arg4); 201 202#define DTRACE_INT5(name, type1, arg1, type2, arg2, \ 203 type3, arg3, type4, arg4, type5, arg5) \ 204 DTRACE_PROBE5(__sdt_, name, arg1, arg2, arg3, arg4, arg5); 205 206#define DTRACE_TMR3(name, type1, arg1, type2, arg2, type3, arg3) \ 207 DTRACE_PROBE3(__sdt_, name, arg1, arg2, arg3); 208 209#define DTRACE_TMR4(name, type1, arg1, arg2, arg3, arg4) \ 210 DTRACE_PROBE4(__sdt_, name, arg1, arg2, arg3, arg4); 211 212#define DTRACE_TMR5(name, type1, arg1, type2, arg2, type3, arg3, arg4, arg5) \ 213 DTRACE_PROBE5(__sdt_, name, arg1, arg2, arg3, arg4, arg5); 214 215#define DTRACE_TMR6(name, type1, arg1, type2, arg2, type3, arg3, arg4, arg5, arg6) \ 216 DTRACE_PROBE6(__sdt_, name, arg1, arg2, arg3, arg4, arg5, arg6); 217 218 219 220#define DTRACE_VM(name) \ 221 DTRACE_PROBE(__vminfo_, name) 222 223#define DTRACE_VM1(name, type1, arg1) \ 224 DTRACE_PROBE1(__vminfo_, name, arg1) 225 226#define DTRACE_VM2(name, type1, arg1, type2, arg2) \ 227 DTRACE_PROBE2(__vminfo_, name, arg1, arg2) 228 229#define DTRACE_VM3(name, type1, arg1, type2, arg2, type3, arg3) \ 230 DTRACE_PROBE3(__vminfo_, name, arg1, arg2, arg3) 231 232#define DTRACE_VM4(name, type1, arg1, type2, arg2, \ 233 type3, arg3, type4, arg4) \ 234 DTRACE_PROBE4(__vminfo_, name, arg1, arg2, arg3, arg4) 235 236#define DTRACE_IP(name) \ 237 DTRACE_PROBE(__ip_, name) 238 239#define DTRACE_IP1(name, type1, arg1) \ 240 DTRACE_PROBE1(__ip_, name, arg1) 241 242#define DTRACE_IP2(name, type1, arg1, type2, arg2) \ 243 DTRACE_PROBE2(__ip_, name, arg1, arg2) 244 245#define DTRACE_IP3(name, type1, arg1, type2, arg2, type3, arg3) \ 246 DTRACE_PROBE3(__ip_, name, arg1, arg2, arg3) 247 248#define DTRACE_IP4(name, type1, arg1, type2, arg2, \ 249 type3, arg3, type4, arg4) \ 250 DTRACE_PROBE4(__ip_, name, arg1, arg2, arg3, arg4) 251 252#define DTRACE_IP5(name, typ1, arg1, type2, arg2, type3, arg3, \ 253 type4, arg4, type5, arg5) \ 254 DTRACE_PROBE5(__ip_, name, arg1, arg2, arg3, arg4, arg5) 255 256#define DTRACE_IP6(name, type1, arg1, type2, arg2, type3, arg3, \ 257 type4,arg4, type5, arg5, type6, arg6) \ 258 DTRACE_PROBE6(__ip_, name, arg1, arg2, arg3, arg4, arg5, arg6) 259 260#define DTRACE_IP7(name, type1, arg1, type2, arg2, type3, arg3, \ 261 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \ 262 DTRACE_PROBE7(__ip_, name, arg1, arg2, arg3, arg4, arg5, arg6, arg7) 263 264#define DTRACE_TCP(name) \ 265 DTRACE_PROBE(__tcp_, name) 266 267#define DTRACE_TCP1(name, type1, arg1) \ 268 DTRACE_PROBE1(__tcp_, name, arg1) 269 270#define DTRACE_TCP2(name, type1, arg1, type2, arg2) \ 271 DTRACE_PROBE2(__tcp_, name, arg1, arg2) 272 273#define DTRACE_TCP3(name, type1, arg1, type2, arg2, type3, arg3) \ 274 DTRACE_PROBE3(__tcp_, name, arg1, arg2, arg3) 275 276#define DTRACE_TCP4(name, type1, arg1, type2, arg2, \ 277 type3, arg3, type4, arg4) \ 278 DTRACE_PROBE4(__tcp_, name, arg1, arg2, arg3, arg4) 279 280#define DTRACE_TCP5(name, typ1, arg1, type2, arg2, type3, arg3, \ 281 type4, arg4, type5, arg5) \ 282 DTRACE_PROBE5(__tcp_, name, arg1, arg2, arg3, arg4, arg5) 283 284#else /* CONFIG_DTRACE */ 285 286#define DTRACE_SCHED(name) do {} while (0) 287#define DTRACE_SCHED1(name, type1, arg1) do {} while (0) 288#define DTRACE_SCHED2(name, type1, arg1, type2, arg2) do {} while (0) 289#define DTRACE_SCHED3(name, type1, arg1, type2, arg2, type3, arg3) do {} while (0) 290#define DTRACE_SCHED4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) do {} while (0) 291 292#define DTRACE_PROC(name) do {} while(0) 293#define DTRACE_PROC1(name, type1, arg1) do {} while(0) 294#define DTRACE_PROC2(name, type1, arg1, type2, arg2) do {} while (0) 295#define DTRACE_PROC3(name, type1, arg1, type2, arg2, type3, arg3) do {} while (0) 296#define DTRACE_PROC4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) do {} while(0) 297#define DTRACE_IO(name) do {} while(0) 298#define DTRACE_IO1(name, type1, arg1) do {} while(0) 299#define DTRACE_IO2(name, type1, arg1, type2, arg2) do {} while(0) 300#define DTRACE_IO3(name, type1, arg1, type2, arg2, type3, arg3) do {} while(0) 301#define DTRACE_IO4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) do {} while(0) 302#define DTRACE_INT5(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5) do {} while(0) 303#define DTRACE_TMR3(name, type1, arg1, type2, arg2, type3, arg3) do {} while(0) 304 305#define DTRACE_VM(name) do {} while(0) 306#define DTRACE_VM1(name, type1, arg1) do {} while(0) 307#define DTRACE_VM2(name, type1, arg1, type2, arg2) do {} while(0) 308#define DTRACE_VM3(name, type1, arg1, type2, arg2, type3, arg3) do {} while(0) 309#define DTRACE_VM4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) do {} while(0) 310#define DTRACE_IP(name) do {} while(0) 311#define DTRACE_IP1(name, type1, arg1) do {} while(0) 312#define DTRACE_IP2(name, type1, arg1, type2, arg2) do {} while(0) 313#define DTRACE_IP3(name, type1, arg1, type2, arg2, type3, arg3) do {} while(0) 314#define DTRACE_IP4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) do {} while(0) 315#define DTRACE_IP5(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5) do {} while(0) 316#define DTRACE_IP6(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5, type6, arg6) do {} while(0) 317#define DTRACE_IP7(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5, \ 318 type6, arg6, type7, arg7) do {} while(0) 319 320#define DTRACE_TCP(name) do {} while(0) 321#define DTRACE_TCP1(name, type1, arg1) do {} while(0) 322#define DTRACE_TCP2(name, type1, arg1, type2, arg2) do {} while(0) 323#define DTRACE_TCP3(name, type1, arg1, type2, arg2, type3, arg3) do {} while(0) 324#define DTRACE_TCP4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) do {} while(0) 325#define DTRACE_TCP5(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4, type5, arg5) do {} while(0) 326 327#endif /* CONFIG_DTRACE */ 328 329#endif /* KERNEL */ 330 331 332 333#endif /* _MACH_SDT_H */ 334