20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 *
24 */
25
26 #ifndef SHARE_VM_UTILITIES_DTRACE_HPP
27 #define SHARE_VM_UTILITIES_DTRACE_HPP
28
29 #if defined(DTRACE_ENABLED)
30
31 #include <sys/sdt.h>
32
33 #define DTRACE_ONLY(x) x
34 #define NOT_DTRACE(x)
35
36 #if defined(SOLARIS)
37 // Work around dtrace tail call bug 6672627 until it is fixed in solaris 10.
38 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \
39 do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0)
40
41 #elif defined(LINUX)
42 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
43 #elif defined(__APPLE__)
44 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
45 #include <sys/types.h>
46 #else
47 #error "dtrace enabled for unknown os"
48 #endif /* defined(SOLARIS) */
49
50 #define USDT2 1
51 #include "dtracefiles/hotspot.h"
52 #include "dtracefiles/hotspot_jni.h"
53 #include "dtracefiles/hs_private.h"
54
55 #else /* defined(DTRACE_ENABLED) */
56
57 #define DTRACE_ONLY(x)
58 #define NOT_DTRACE(x) x
59
60 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
61
62 #ifndef USDT2
63
64 #define DTRACE_PROBE(a,b) {;}
65 #define DTRACE_PROBE1(a,b,c) {;}
66 #define DTRACE_PROBE2(a,b,c,d) {;}
67 #define DTRACE_PROBE3(a,b,c,d,e) {;}
68 #define DTRACE_PROBE4(a,b,c,d,e,f) {;}
69 #define DTRACE_PROBE5(a,b,c,d,e,f,g) {;}
70 #define DTRACE_PROBE6(a,b,c,d,e,f,g,h) {;}
71 #define DTRACE_PROBE7(a,b,c,d,e,f,g,h,i) {;}
72 #define DTRACE_PROBE8(a,b,c,d,e,f,g,h,i,j) {;}
73 #define DTRACE_PROBE9(a,b,c,d,e,f,g,h,i,j,k) {;}
74 #define DTRACE_PROBE10(a,b,c,d,e,f,g,h,i,j,k,l) {;}
75
76 #else /* USDT2 */
77
78 #include "dtrace_usdt2_disabled.hpp"
79 #endif /* USDT2 */
80
81 #endif /* defined(DTRACE_ENABLED) */
82
83 #ifndef USDT2
84
85 #define HS_DTRACE_PROBE_FN(provider,name)\
86 __dtrace_##provider##___##name
87
88 #ifdef SOLARIS
89 // Solaris dtrace needs actual extern function decls.
90 #define HS_DTRACE_PROBE_DECL_N(provider,name,args) \
91 DTRACE_ONLY(extern "C" void HS_DTRACE_PROBE_FN(provider,name) args)
92 #define HS_DTRACE_PROBE_CDECL_N(provider,name,args) \
93 DTRACE_ONLY(extern void HS_DTRACE_PROBE_FN(provider,name) args)
94 #else
95 // Systemtap dtrace compatible probes on GNU/Linux don't.
96 // If dtrace is disabled this macro becomes NULL
97 #define HS_DTRACE_PROBE_DECL_N(provider,name,args)
98 #define HS_DTRACE_PROBE_CDECL_N(provider,name,args)
99 #endif
100
101 /* Dtrace probe declarations */
102 #define HS_DTRACE_PROBE_DECL(provider,name) \
103 HS_DTRACE_PROBE_DECL0(provider,name)
104 #define HS_DTRACE_PROBE_DECL0(provider,name)\
105 HS_DTRACE_PROBE_DECL_N(provider,name,(void))
106 #define HS_DTRACE_PROBE_DECL1(provider,name,t0)\
107 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t))
108 #define HS_DTRACE_PROBE_DECL2(provider,name,t0,t1)\
109 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t))
110 #define HS_DTRACE_PROBE_DECL3(provider,name,t0,t1,t2)\
111 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t))
112 #define HS_DTRACE_PROBE_DECL4(provider,name,t0,t1,t2,t3)\
113 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t,\
114 uintptr_t))
115 #define HS_DTRACE_PROBE_DECL5(provider,name,t0,t1,t2,t3,t4)\
116 HS_DTRACE_PROBE_DECL_N(provider,name,(\
117 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
118 #define HS_DTRACE_PROBE_DECL6(provider,name,t0,t1,t2,t3,t4,t5)\
119 HS_DTRACE_PROBE_DECL_N(provider,name,(\
120 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
121 #define HS_DTRACE_PROBE_DECL7(provider,name,t0,t1,t2,t3,t4,t5,t6)\
122 HS_DTRACE_PROBE_DECL_N(provider,name,(\
123 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
124 #define HS_DTRACE_PROBE_DECL8(provider,name,t0,t1,t2,t3,t4,t5,t6,t7)\
125 HS_DTRACE_PROBE_DECL_N(provider,name,(\
126 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
127 uintptr_t))
128 #define HS_DTRACE_PROBE_DECL9(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8)\
129 HS_DTRACE_PROBE_DECL_N(provider,name,(\
130 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
131 uintptr_t,uintptr_t))
132 #define HS_DTRACE_PROBE_DECL10(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9)\
133 HS_DTRACE_PROBE_DECL_N(provider,name,(\
134 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
135 uintptr_t,uintptr_t,uintptr_t))
136
137 /* Dtrace probe definitions */
138 #if defined(SOLARIS)
139 // Solaris dtrace uses actual function calls.
140 #define HS_DTRACE_PROBE_N(provider,name, args) \
141 DTRACE_ONLY(HS_DTRACE_PROBE_FN(provider,name) args)
142
143 #define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)
144 #define HS_DTRACE_PROBE0(provider,name)\
145 HS_DTRACE_PROBE_N(provider,name,())
146 #define HS_DTRACE_PROBE1(provider,name,a0)\
147 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0))
148 #define HS_DTRACE_PROBE2(provider,name,a0,a1)\
149 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1))
150 #define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\
151 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2))
152 #define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\
153 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
154 (uintptr_t)a3))
155 #define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\
156 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
157 (uintptr_t)a3,(uintptr_t)a4))
158 #define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\
159 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
160 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5))
161 #define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\
162 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
163 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6))
164 #define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\
165 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
166 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7))
167 #define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\
168 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
169 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\
170 (uintptr_t)a8))
171 #define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)\
172 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
173 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\
174 (uintptr_t)a8,(uintptr_t)a9))
175 #else
176 // Systemtap dtrace compatible probes on GNU/Linux use direct macros.
177 // If dtrace is disabled this macro becomes NULL
178 #define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)
179 #define HS_DTRACE_PROBE0(provider,name)\
180 DTRACE_PROBE(provider,name)
181 #define HS_DTRACE_PROBE1(provider,name,a0)\
182 DTRACE_PROBE1(provider,name,a0)
183 #define HS_DTRACE_PROBE2(provider,name,a0,a1)\
184 DTRACE_PROBE2(provider,name,a0,a1)
185 #define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\
186 DTRACE_PROBE3(provider,name,a0,a1,a2)
187 #define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\
188 DTRACE_PROBE4(provider,name,a0,a1,a2,a3)
189 #define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\
190 DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)
191 #define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\
192 DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)
193 #define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\
194 DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)
195 #define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\
196 DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)
197 #define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\
198 DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)
199 #define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)\
200 DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)
201 #endif
202
203 #endif /* !USDT2 */
204
205 #endif // SHARE_VM_UTILITIES_DTRACE_HPP
|
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 *
24 */
25
26 #ifndef SHARE_VM_UTILITIES_DTRACE_HPP
27 #define SHARE_VM_UTILITIES_DTRACE_HPP
28
29 #if defined(DTRACE_ENABLED)
30
31 #include <sys/sdt.h>
32
33 #define DTRACE_ONLY(x) x
34 #define NOT_DTRACE(x)
35
36 #if defined(SOLARIS)
37 // Work around dtrace tail call bug 6672627 until it is fixed in solaris 10.
38 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \
39 do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0)
40 #elif defined(LINUX)
41 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
42 #elif defined(__APPLE__)
43 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
44 #include <sys/types.h>
45 #else
46 #error "dtrace enabled for unknown os"
47 #endif /* defined(SOLARIS) */
48
49 #include "dtracefiles/hotspot.h"
50 #include "dtracefiles/hotspot_jni.h"
51 #include "dtracefiles/hs_private.h"
52
53 #else /* defined(DTRACE_ENABLED) */
54
55 #define DTRACE_ONLY(x)
56 #define NOT_DTRACE(x) x
57
58 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
59
60 #include "dtrace_usdt2_disabled.hpp"
61
62 #endif /* defined(DTRACE_ENABLED) */
63
64 #endif // SHARE_VM_UTILITIES_DTRACE_HPP
|