Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/utilities/dtrace.hpp
32285 views
/*1* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.2* Copyright (c) 2009, 2012 Red Hat, Inc.3* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.4*5* This code is free software; you can redistribute it and/or modify it6* under the terms of the GNU General Public License version 2 only, as7* published by the Free Software Foundation.8*9* This code is distributed in the hope that it will be useful, but WITHOUT10* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or11* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License12* version 2 for more details (a copy is included in the LICENSE file that13* accompanied this code).14*15* You should have received a copy of the GNU General Public License version16* 2 along with this work; if not, write to the Free Software Foundation,17* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.18*19* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA20* or visit www.oracle.com if you need additional information or have any21* questions.22*23*/2425#ifndef SHARE_VM_UTILITIES_DTRACE_HPP26#define SHARE_VM_UTILITIES_DTRACE_HPP2728#if defined(DTRACE_ENABLED)2930#include <sys/sdt.h>3132#define DTRACE_ONLY(x) x33#define NOT_DTRACE(x)3435#if defined(SOLARIS)36// Work around dtrace tail call bug 6672627 until it is fixed in solaris 10.37#define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \38do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0)3940#define USDT1 141#elif defined(LINUX)42#define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()43#define USDT1 144#elif defined(__APPLE__)45#define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()46#define USDT2 147#include <sys/types.h>48#include "dtracefiles/hotspot.h"49#include "dtracefiles/hotspot_jni.h"50#include "dtracefiles/hs_private.h"51#else52#error "dtrace enabled for unknown os"53#endif /* defined(SOLARIS) */5455#else /* defined(DTRACE_ENABLED) */5657#define DTRACE_ONLY(x)58#define NOT_DTRACE(x) x5960#define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()6162#ifndef USDT26364#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) {;}7576#else /* USDT2 */7778#include "dtrace_usdt2_disabled.hpp"79#endif /* USDT2 */8081#endif /* defined(DTRACE_ENABLED) */8283#ifndef USDT28485#define HS_DTRACE_PROBE_FN(provider,name)\86__dtrace_##provider##___##name8788#ifdef SOLARIS89// Solaris dtrace needs actual extern function decls.90#define HS_DTRACE_PROBE_DECL_N(provider,name,args) \91DTRACE_ONLY(extern "C" void HS_DTRACE_PROBE_FN(provider,name) args)92#define HS_DTRACE_PROBE_CDECL_N(provider,name,args) \93DTRACE_ONLY(extern void HS_DTRACE_PROBE_FN(provider,name) args)94#else95// Systemtap dtrace compatible probes on GNU/Linux don't.96// If dtrace is disabled this macro becomes NULL97#define HS_DTRACE_PROBE_DECL_N(provider,name,args)98#define HS_DTRACE_PROBE_CDECL_N(provider,name,args)99#endif100101/* Dtrace probe declarations */102#define HS_DTRACE_PROBE_DECL(provider,name) \103HS_DTRACE_PROBE_DECL0(provider,name)104#define HS_DTRACE_PROBE_DECL0(provider,name)\105HS_DTRACE_PROBE_DECL_N(provider,name,(void))106#define HS_DTRACE_PROBE_DECL1(provider,name,t0)\107HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t))108#define HS_DTRACE_PROBE_DECL2(provider,name,t0,t1)\109HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t))110#define HS_DTRACE_PROBE_DECL3(provider,name,t0,t1,t2)\111HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t))112#define HS_DTRACE_PROBE_DECL4(provider,name,t0,t1,t2,t3)\113HS_DTRACE_PROBE_DECL_N(provider,name,(uintptr_t,uintptr_t,uintptr_t,\114uintptr_t))115#define HS_DTRACE_PROBE_DECL5(provider,name,t0,t1,t2,t3,t4)\116HS_DTRACE_PROBE_DECL_N(provider,name,(\117uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t))118#define HS_DTRACE_PROBE_DECL6(provider,name,t0,t1,t2,t3,t4,t5)\119HS_DTRACE_PROBE_DECL_N(provider,name,(\120uintptr_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)\122HS_DTRACE_PROBE_DECL_N(provider,name,(\123uintptr_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)\125HS_DTRACE_PROBE_DECL_N(provider,name,(\126uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\127uintptr_t))128#define HS_DTRACE_PROBE_DECL9(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8)\129HS_DTRACE_PROBE_DECL_N(provider,name,(\130uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\131uintptr_t,uintptr_t))132#define HS_DTRACE_PROBE_DECL10(provider,name,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9)\133HS_DTRACE_PROBE_DECL_N(provider,name,(\134uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,uintptr_t,\135uintptr_t,uintptr_t,uintptr_t))136137/* Dtrace probe definitions */138#if defined(SOLARIS)139// Solaris dtrace uses actual function calls.140#define HS_DTRACE_PROBE_N(provider,name, args) \141DTRACE_ONLY(HS_DTRACE_PROBE_FN(provider,name) args)142143#define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)144#define HS_DTRACE_PROBE0(provider,name)\145HS_DTRACE_PROBE_N(provider,name,())146#define HS_DTRACE_PROBE1(provider,name,a0)\147HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0))148#define HS_DTRACE_PROBE2(provider,name,a0,a1)\149HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1))150#define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\151HS_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)\153HS_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)\156HS_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)\159HS_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)\162HS_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)\165HS_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)\168HS_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)\172HS_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#else176// Systemtap dtrace compatible probes on GNU/Linux use direct macros.177// If dtrace is disabled this macro becomes NULL178#define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)179#define HS_DTRACE_PROBE0(provider,name)\180DTRACE_PROBE(provider,name)181#define HS_DTRACE_PROBE1(provider,name,a0)\182DTRACE_PROBE1(provider,name,a0)183#define HS_DTRACE_PROBE2(provider,name,a0,a1)\184DTRACE_PROBE2(provider,name,a0,a1)185#define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\186DTRACE_PROBE3(provider,name,a0,a1,a2)187#define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\188DTRACE_PROBE4(provider,name,a0,a1,a2,a3)189#define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\190DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)191#define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\192DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)193#define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\194DTRACE_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)\196DTRACE_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)\198DTRACE_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)\200DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)201#endif202203#endif /* !USDT2 */204205#endif // SHARE_VM_UTILITIES_DTRACE_HPP206207208