src/share/vm/runtime/dtraceJSDT.hpp

Wed, 02 Feb 2011 11:35:26 -0500

author
bobv
date
Wed, 02 Feb 2011 11:35:26 -0500
changeset 2508
b92c45f2bc75
parent 2314
f95d63e2154a
child 2708
1d1603768966
permissions
-rw-r--r--

7016023: Enable building ARM and PPC from src/closed repository
Reviewed-by: dholmes, bdelsart

     1 /*
     2  * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
     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 it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 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 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 #ifndef SHARE_VM_RUNTIME_DTRACEJSDT_HPP
    26 #define SHARE_VM_RUNTIME_DTRACEJSDT_HPP
    28 #include "code/nmethod.hpp"
    29 #ifdef TARGET_ARCH_x86
    30 # include "nativeInst_x86.hpp"
    31 #endif
    32 #ifdef TARGET_ARCH_sparc
    33 # include "nativeInst_sparc.hpp"
    34 #endif
    35 #ifdef TARGET_ARCH_zero
    36 # include "nativeInst_zero.hpp"
    37 #endif
    38 #ifdef TARGET_ARCH_arm
    39 # include "nativeInst_arm.hpp"
    40 #endif
    41 #ifdef TARGET_ARCH_ppc
    42 # include "nativeInst_ppc.hpp"
    43 #endif
    45 class RegisteredProbes;
    46 typedef jlong OpaqueProbes;
    48 class DTraceJSDT : AllStatic {
    49  private:
    51   static int pd_activate(void* moduleBaseAddress, jstring module,
    52       jint providers_count, JVM_DTraceProvider* providers);
    53   static void pd_dispose(int handle);
    54   static jboolean pd_is_supported();
    56  public:
    58   static OpaqueProbes activate(
    59       jint version, jstring module_name, jint providers_count,
    60       JVM_DTraceProvider* providers, TRAPS);
    61   static jboolean is_probe_enabled(jmethodID method);
    62   static void dispose(OpaqueProbes handle);
    63   static jboolean is_supported();
    64 };
    66 class RegisteredProbes : public CHeapObj {
    67  private:
    68   nmethod** _nmethods;      // all the probe methods
    69   size_t    _count;         // number of probe methods
    70   int       _helper_handle; // DTrace-assigned identifier
    72  public:
    73   RegisteredProbes(size_t count) {
    74     _count = count;
    75     _nmethods = NEW_C_HEAP_ARRAY(nmethod*, count);
    76   }
    78   ~RegisteredProbes() {
    79     for (size_t i = 0; i < _count; ++i) {
    80       // Let the sweeper reclaim it
    81       _nmethods[i]->make_not_entrant();
    82       _nmethods[i]->method()->clear_code();
    83     }
    84     FREE_C_HEAP_ARRAY(nmethod*, _nmethods);
    85     _nmethods = NULL;
    86     _count = 0;
    87   }
    89   static RegisteredProbes* toRegisteredProbes(OpaqueProbes p) {
    90     return (RegisteredProbes*)(intptr_t)p;
    91   }
    93   static OpaqueProbes toOpaqueProbes(RegisteredProbes* p) {
    94     return (OpaqueProbes)(intptr_t)p;
    95   }
    97   void set_helper_handle(int handle) { _helper_handle = handle; }
    98   int helper_handle() const { return _helper_handle; }
   100   nmethod* nmethod_at(size_t i) {
   101     assert(i >= 0 && i < _count, "bad nmethod index");
   102     return _nmethods[i];
   103   }
   105   void nmethod_at_put(size_t i, nmethod* nm) {
   106     assert(i >= 0 && i < _count, "bad nmethod index");
   107     _nmethods[i] = nm;
   108   }
   109 };
   111 #endif // SHARE_VM_RUNTIME_DTRACEJSDT_HPP

mercurial