hotspot/src/share/vm/utilities/dtrace.hpp
changeset 22796 bb0ea482a99e
parent 22736 6c317cced072
equal deleted inserted replaced
22795:2b5380bc0926 22796:bb0ea482a99e
    35 
    35 
    36 #if defined(SOLARIS)
    36 #if defined(SOLARIS)
    37 // Work around dtrace tail call bug 6672627 until it is fixed in solaris 10.
    37 // Work around dtrace tail call bug 6672627 until it is fixed in solaris 10.
    38 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \
    38 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \
    39   do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0)
    39   do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0)
    40 
       
    41 #elif defined(LINUX)
    40 #elif defined(LINUX)
    42 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
    41 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
    43 #elif defined(__APPLE__)
    42 #elif defined(__APPLE__)
    44 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
    43 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
    45 #include <sys/types.h>
    44 #include <sys/types.h>
    46 #else
    45 #else
    47 #error "dtrace enabled for unknown os"
    46 #error "dtrace enabled for unknown os"
    48 #endif /* defined(SOLARIS) */
    47 #endif /* defined(SOLARIS) */
    49 
    48 
    50 #define USDT2 1
       
    51 #include "dtracefiles/hotspot.h"
    49 #include "dtracefiles/hotspot.h"
    52 #include "dtracefiles/hotspot_jni.h"
    50 #include "dtracefiles/hotspot_jni.h"
    53 #include "dtracefiles/hs_private.h"
    51 #include "dtracefiles/hs_private.h"
    54 
    52 
    55 #else /* defined(DTRACE_ENABLED) */
    53 #else /* defined(DTRACE_ENABLED) */
    57 #define DTRACE_ONLY(x)
    55 #define DTRACE_ONLY(x)
    58 #define NOT_DTRACE(x) x
    56 #define NOT_DTRACE(x) x
    59 
    57 
    60 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
    58 #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
    61 
    59 
    62 #ifndef USDT2
    60 #include "dtrace_disabled.hpp"
    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 
    61 
    81 #endif /* defined(DTRACE_ENABLED) */
    62 #endif /* defined(DTRACE_ENABLED) */
    82 
    63 
    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
    64 #endif // SHARE_VM_UTILITIES_DTRACE_HPP