src/share/vm/utilities/dtrace.hpp

Tue, 08 Aug 2017 15:57:29 +0800

author
aoqi
date
Tue, 08 Aug 2017 15:57:29 +0800
changeset 6876
710a3c8b516e
parent 4148
75982791ddb6
parent 0
f90c822e73f8
permissions
-rw-r--r--

merge

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * Copyright (c) 2009, 2012 Red Hat, Inc.
aoqi@0 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 5 *
aoqi@0 6 * This code is free software; you can redistribute it and/or modify it
aoqi@0 7 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 8 * published by the Free Software Foundation.
aoqi@0 9 *
aoqi@0 10 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 13 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 14 * accompanied this code).
aoqi@0 15 *
aoqi@0 16 * You should have received a copy of the GNU General Public License version
aoqi@0 17 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 19 *
aoqi@0 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 21 * or visit www.oracle.com if you need additional information or have any
aoqi@0 22 * questions.
aoqi@0 23 *
aoqi@0 24 */
aoqi@0 25
aoqi@0 26 #ifndef SHARE_VM_UTILITIES_DTRACE_HPP
aoqi@0 27 #define SHARE_VM_UTILITIES_DTRACE_HPP
aoqi@0 28
aoqi@0 29 #if defined(DTRACE_ENABLED)
aoqi@0 30
aoqi@0 31 #include <sys/sdt.h>
aoqi@0 32
aoqi@0 33 #define DTRACE_ONLY(x) x
aoqi@0 34 #define NOT_DTRACE(x)
aoqi@0 35
aoqi@0 36 #if defined(SOLARIS)
aoqi@0 37 // Work around dtrace tail call bug 6672627 until it is fixed in solaris 10.
aoqi@0 38 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \
aoqi@0 39 do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0)
aoqi@0 40
aoqi@0 41 #define USDT1 1
aoqi@0 42 #elif defined(LINUX)
aoqi@0 43 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
aoqi@0 44 #define USDT1 1
aoqi@0 45 #elif defined(__APPLE__)
aoqi@0 46 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
aoqi@0 47 #define USDT2 1
aoqi@0 48 #include <sys/types.h>
aoqi@0 49 #include "dtracefiles/hotspot.h"
aoqi@0 50 #include "dtracefiles/hotspot_jni.h"
aoqi@0 51 #include "dtracefiles/hs_private.h"
aoqi@0 52 #else
aoqi@0 53 #error "dtrace enabled for unknown os"
aoqi@0 54 #endif /* defined(SOLARIS) */
aoqi@0 55
aoqi@0 56 #else /* defined(DTRACE_ENABLED) */
aoqi@0 57
aoqi@0 58 #define DTRACE_ONLY(x)
aoqi@0 59 #define NOT_DTRACE(x) x
aoqi@0 60
aoqi@0 61 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
aoqi@0 62
aoqi@0 63 #ifndef USDT2
aoqi@0 64
aoqi@0 65 #define DTRACE_PROBE(a,b) {;}
aoqi@0 66 #define DTRACE_PROBE1(a,b,c) {;}
aoqi@0 67 #define DTRACE_PROBE2(a,b,c,d) {;}
aoqi@0 68 #define DTRACE_PROBE3(a,b,c,d,e) {;}
aoqi@0 69 #define DTRACE_PROBE4(a,b,c,d,e,f) {;}
aoqi@0 70 #define DTRACE_PROBE5(a,b,c,d,e,f,g) {;}
aoqi@0 71 #define DTRACE_PROBE6(a,b,c,d,e,f,g,h) {;}
aoqi@0 72 #define DTRACE_PROBE7(a,b,c,d,e,f,g,h,i) {;}
aoqi@0 73 #define DTRACE_PROBE8(a,b,c,d,e,f,g,h,i,j) {;}
aoqi@0 74 #define DTRACE_PROBE9(a,b,c,d,e,f,g,h,i,j,k) {;}
aoqi@0 75 #define DTRACE_PROBE10(a,b,c,d,e,f,g,h,i,j,k,l) {;}
aoqi@0 76
aoqi@0 77 #else /* USDT2 */
aoqi@0 78
aoqi@0 79 #include "dtrace_usdt2_disabled.hpp"
aoqi@0 80 #endif /* USDT2 */
aoqi@0 81
aoqi@0 82 #endif /* defined(DTRACE_ENABLED) */
aoqi@0 83
aoqi@0 84 #ifndef USDT2
aoqi@0 85
aoqi@0 86 #define HS_DTRACE_PROBE_FN(provider,name)\
aoqi@0 87 __dtrace_##provider##___##name
aoqi@0 88
aoqi@0 89 #ifdef SOLARIS
aoqi@0 90 // Solaris dtrace needs actual extern function decls.
aoqi@0 91 #define HS_DTRACE_PROBE_DECL_N(provider,name,args) \
aoqi@0 92 DTRACE_ONLY(extern "C" void HS_DTRACE_PROBE_FN(provider,name) args)
aoqi@0 93 #define HS_DTRACE_PROBE_CDECL_N(provider,name,args) \
aoqi@0 94 DTRACE_ONLY(extern void HS_DTRACE_PROBE_FN(provider,name) args)
aoqi@0 95 #else
aoqi@0 96 // Systemtap dtrace compatible probes on GNU/Linux don't.
aoqi@0 97 // If dtrace is disabled this macro becomes NULL
aoqi@0 98 #define HS_DTRACE_PROBE_DECL_N(provider,name,args)
aoqi@0 99 #define HS_DTRACE_PROBE_CDECL_N(provider,name,args)
aoqi@0 100 #endif
aoqi@0 101
aoqi@0 102 /* Dtrace probe declarations */
aoqi@0 103 #define HS_DTRACE_PROBE_DECL(provider,name) \
aoqi@0 104 HS_DTRACE_PROBE_DECL0(provider,name)
aoqi@0 105 #define HS_DTRACE_PROBE_DECL0(provider,name)\
aoqi@0 106 HS_DTRACE_PROBE_DECL_N(provider,name,(void))
aoqi@0 107 #define HS_DTRACE_PROBE_DECL1(provider,name,t0)\
aoqi@0 108 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t))
aoqi@0 109 #define HS_DTRACE_PROBE_DECL2(provider,name,t0,t1)\
aoqi@0 110 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t))
aoqi@0 111 #define HS_DTRACE_PROBE_DECL3(provider,name,t0,t1,t2)\
aoqi@0 112 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t))
aoqi@0 113 #define HS_DTRACE_PROBE_DECL4(provider,name,t0,t1,t2,t3)\
aoqi@0 114 HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t,\
aoqi@0 115 uintptr_t))
aoqi@0 116 #define HS_DTRACE_PROBE_DECL5(provider,name,t0,t1,t2,t3,t4)\
aoqi@0 117 HS_DTRACE_PROBE_DECL_N(provider,name,(\
aoqi@0 118 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
aoqi@0 119 #define HS_DTRACE_PROBE_DECL6(provider,name,t0,t1,t2,t3,t4,t5)\
aoqi@0 120 HS_DTRACE_PROBE_DECL_N(provider,name,(\
aoqi@0 121 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
aoqi@0 122 #define HS_DTRACE_PROBE_DECL7(provider,name,t0,t1,t2,t3,t4,t5,t6)\
aoqi@0 123 HS_DTRACE_PROBE_DECL_N(provider,name,(\
aoqi@0 124 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))
aoqi@0 125 #define HS_DTRACE_PROBE_DECL8(provider,name,t0,t1,t2,t3,t4,t5,t6,t7)\
aoqi@0 126 HS_DTRACE_PROBE_DECL_N(provider,name,(\
aoqi@0 127 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
aoqi@0 128 uintptr_t))
aoqi@0 129 #define HS_DTRACE_PROBE_DECL9(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8)\
aoqi@0 130 HS_DTRACE_PROBE_DECL_N(provider,name,(\
aoqi@0 131 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
aoqi@0 132 uintptr_t,uintptr_t))
aoqi@0 133 #define HS_DTRACE_PROBE_DECL10(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9)\
aoqi@0 134 HS_DTRACE_PROBE_DECL_N(provider,name,(\
aoqi@0 135 uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\
aoqi@0 136 uintptr_t,uintptr_t,uintptr_t))
aoqi@0 137
aoqi@0 138 /* Dtrace probe definitions */
aoqi@0 139 #if defined(SOLARIS)
aoqi@0 140 // Solaris dtrace uses actual function calls.
aoqi@0 141 #define HS_DTRACE_PROBE_N(provider,name, args) \
aoqi@0 142 DTRACE_ONLY(HS_DTRACE_PROBE_FN(provider,name) args)
aoqi@0 143
aoqi@0 144 #define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)
aoqi@0 145 #define HS_DTRACE_PROBE0(provider,name)\
aoqi@0 146 HS_DTRACE_PROBE_N(provider,name,())
aoqi@0 147 #define HS_DTRACE_PROBE1(provider,name,a0)\
aoqi@0 148 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0))
aoqi@0 149 #define HS_DTRACE_PROBE2(provider,name,a0,a1)\
aoqi@0 150 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1))
aoqi@0 151 #define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\
aoqi@0 152 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2))
aoqi@0 153 #define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\
aoqi@0 154 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
aoqi@0 155 (uintptr_t)a3))
aoqi@0 156 #define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\
aoqi@0 157 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
aoqi@0 158 (uintptr_t)a3,(uintptr_t)a4))
aoqi@0 159 #define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\
aoqi@0 160 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
aoqi@0 161 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5))
aoqi@0 162 #define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\
aoqi@0 163 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
aoqi@0 164 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6))
aoqi@0 165 #define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\
aoqi@0 166 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
aoqi@0 167 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7))
aoqi@0 168 #define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\
aoqi@0 169 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
aoqi@0 170 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\
aoqi@0 171 (uintptr_t)a8))
aoqi@0 172 #define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)\
aoqi@0 173 HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
aoqi@0 174 (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\
aoqi@0 175 (uintptr_t)a8,(uintptr_t)a9))
aoqi@0 176 #else
aoqi@0 177 // Systemtap dtrace compatible probes on GNU/Linux use direct macros.
aoqi@0 178 // If dtrace is disabled this macro becomes NULL
aoqi@0 179 #define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)
aoqi@0 180 #define HS_DTRACE_PROBE0(provider,name)\
aoqi@0 181 DTRACE_PROBE(provider,name)
aoqi@0 182 #define HS_DTRACE_PROBE1(provider,name,a0)\
aoqi@0 183 DTRACE_PROBE1(provider,name,a0)
aoqi@0 184 #define HS_DTRACE_PROBE2(provider,name,a0,a1)\
aoqi@0 185 DTRACE_PROBE2(provider,name,a0,a1)
aoqi@0 186 #define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\
aoqi@0 187 DTRACE_PROBE3(provider,name,a0,a1,a2)
aoqi@0 188 #define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\
aoqi@0 189 DTRACE_PROBE4(provider,name,a0,a1,a2,a3)
aoqi@0 190 #define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\
aoqi@0 191 DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)
aoqi@0 192 #define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\
aoqi@0 193 DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)
aoqi@0 194 #define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\
aoqi@0 195 DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)
aoqi@0 196 #define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\
aoqi@0 197 DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)
aoqi@0 198 #define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\
aoqi@0 199 DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)
aoqi@0 200 #define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)\
aoqi@0 201 DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)
aoqi@0 202 #endif
aoqi@0 203
aoqi@0 204 #endif /* !USDT2 */
aoqi@0 205
aoqi@0 206 #endif // SHARE_VM_UTILITIES_DTRACE_HPP

mercurial