[PATCH 2 of 3] XXXXXX: Define DTRACE macros for use with GNU/Linux SystemTap sys/sdt.h
Daniel D. Daugherty
daniel.daugherty at oracle.com
Thu May 10 08:52:36 PDT 2012
Adding serviceability-dev at openjdk.java.net to this e-mail thread.
On 5/10/12 7:49 AM, Mark Wielaard wrote:
> src/share/vm/utilities/dtrace.hpp | 50 ++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 49 insertions(+), 1 deletions(-)
>
>
> # HG changeset patch
> # User Mark Wielaard<mark at klomp.org>
> # Date 1336657104 -7200
> # Node ID ec675cf936d8eeefb11b7624c8f292fdd7e1f847
> # Parent ed003325d9977d3bd8b38afd5db5a97200b310af
> XXXXXX: Define DTRACE macros for use with GNU/Linux SystemTap sys/sdt.h.
> Summary: LINUX also uses USDT1, but with macros instead of function decls.
> Contributed-by: Mark Wielaard<mjw at redhat.com>
>
> diff -r ed003325d997 -r ec675cf936d8 src/share/vm/utilities/dtrace.hpp
> --- a/src/share/vm/utilities/dtrace.hpp Thu May 10 15:31:20 2012 +0200
> +++ b/src/share/vm/utilities/dtrace.hpp Thu May 10 15:38:24 2012 +0200
> @@ -1,5 +1,6 @@
> /*
> * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2009, 2012 Red Hat, Inc.
> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
> *
> * This code is free software; you can redistribute it and/or modify it
> @@ -32,12 +33,15 @@
> #define DTRACE_ONLY(x) x
> #define NOT_DTRACE(x)
>
> +#if defined(SOLARIS)
> // Work around dtrace tail call bug 6672627 until it is fixed in solaris 10.
> #define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG() \
> do { volatile size_t dtrace_workaround_tail_call_bug = 1; } while (0)
>
> -#if defined(SOLARIS)
> #define USDT1 1
> +#elif defined(LINUX)
> +#define USDT1 1
> +#define HS_DTRACE_WORKAROUND_TAIL_CALL_BUG()
> #elif defined(__APPLE__)
> #define USDT2 1
> #include<sys/types.h>
> @@ -63,6 +67,11 @@
> #define DTRACE_PROBE3(a,b,c,d,e) {;}
> #define DTRACE_PROBE4(a,b,c,d,e,f) {;}
> #define DTRACE_PROBE5(a,b,c,d,e,f,g) {;}
> +#define DTRACE_PROBE6(a,b,c,d,e,f,g,h) {;}
> +#define DTRACE_PROBE7(a,b,c,d,e,f,g,h,i) {;}
> +#define DTRACE_PROBE8(a,b,c,d,e,f,g,h,i,j) {;}
> +#define DTRACE_PROBE9(a,b,c,d,e,f,g,h,i,j,k) {;}
> +#define DTRACE_PROBE10(a,b,c,d,e,f,g,h,i,j,k,l) {;}
>
> #else /* USDT2 */
>
> @@ -76,10 +85,19 @@
> #define HS_DTRACE_PROBE_FN(provider,name)\
> __dtrace_##provider##___##name
>
> +#ifdef SOLARIS
> +// Solaris dtrace needs actual extern function decls.
> #define HS_DTRACE_PROBE_DECL_N(provider,name,args) \
> DTRACE_ONLY(extern "C" void HS_DTRACE_PROBE_FN(provider,name) args)
> #define HS_DTRACE_PROBE_CDECL_N(provider,name,args) \
> DTRACE_ONLY(extern void HS_DTRACE_PROBE_FN(provider,name) args)
> +#elif defined(LINUX)
> +// Systemtap dtrace compatible probes on GNU/Linux don't.
> +#define HS_DTRACE_PROBE_DECL_N(provider,name,args)
> +#define HS_DTRACE_PROBE_CDECL_N(provider,name,args)
> +#else
> +#error "USDT1 enabled for unknown os"
> +#endif
>
> /* Dtrace probe declarations */
> #define HS_DTRACE_PROBE_DECL(provider,name) \
> @@ -118,6 +136,8 @@
> uintptr_t,uintptr_t,uintptr_t))
>
> /* Dtrace probe definitions */
> +#if defined(SOLARIS)
> +// Solaris dtrace uses actual function calls.
> #define HS_DTRACE_PROBE_N(provider,name, args) \
> DTRACE_ONLY(HS_DTRACE_PROBE_FN(provider,name) args)
>
> @@ -153,6 +173,34 @@
> HS_DTRACE_PROBE_N(provider,name,((uintptr_t)a0,(uintptr_t)a1,(uintptr_t)a2,\
> (uintptr_t)a3,(uintptr_t)a4,(uintptr_t)a5,(uintptr_t)a6,(uintptr_t)a7,\
> (uintptr_t)a8,(uintptr_t)a9))
> +#elif defined(LINUX)
> +// Systemtap dtrace compatible probes on GNU/Linux use direct macros.
> +#define HS_DTRACE_PROBE(provider,name) HS_DTRACE_PROBE0(provider,name)
> +#define HS_DTRACE_PROBE0(provider,name)\
> + DTRACE_PROBE(provider,name)
> +#define HS_DTRACE_PROBE1(provider,name,a0)\
> + DTRACE_PROBE1(provider,name,a0)
> +#define HS_DTRACE_PROBE2(provider,name,a0,a1)\
> + DTRACE_PROBE2(provider,name,a0,a1)
> +#define HS_DTRACE_PROBE3(provider,name,a0,a1,a2)\
> + DTRACE_PROBE3(provider,name,a0,a1,a2)
> +#define HS_DTRACE_PROBE4(provider,name,a0,a1,a2,a3)\
> + DTRACE_PROBE4(provider,name,a0,a1,a2,a3)
> +#define HS_DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)\
> + DTRACE_PROBE5(provider,name,a0,a1,a2,a3,a4)
> +#define HS_DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)\
> + DTRACE_PROBE6(provider,name,a0,a1,a2,a3,a4,a5)
> +#define HS_DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)\
> + DTRACE_PROBE7(provider,name,a0,a1,a2,a3,a4,a5,a6)
> +#define HS_DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)\
> + DTRACE_PROBE8(provider,name,a0,a1,a2,a3,a4,a5,a6,a7)
> +#define HS_DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\
> + DTRACE_PROBE9(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)
> +#define HS_DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)\
> + DTRACE_PROBE10(provider,name,a0,a1,a2,a3,a4,a5,a6,a7,a8)
> +#else
> +#error "USDT1 enabled for unknown os"
> +#endif
>
> #endif /* !USDT2 */
>
More information about the hotspot-dev
mailing list