src/share/vm/runtime/dtraceJSDT.cpp

Tue, 29 Jul 2014 13:56:29 +0200

author
thartmann
date
Tue, 29 Jul 2014 13:56:29 +0200
changeset 7002
a073be2ce5c2
parent 4037
da91efe96a93
child 6876
710a3c8b516e
permissions
-rw-r--r--

8049043: Load variable through a pointer of an incompatible type in hotspot/src/share/vm/runtime/sharedRuntimeMath.hpp
Summary: Fixed parfait warnings caused by __HI and __LO macros in sharedRuntimeMath.hpp by using a union.
Reviewed-by: kvn

kamg@551 1 /*
coleenp@4037 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
kamg@551 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
kamg@551 4 *
kamg@551 5 * This code is free software; you can redistribute it and/or modify it
kamg@551 6 * under the terms of the GNU General Public License version 2 only, as
kamg@551 7 * published by the Free Software Foundation.
kamg@551 8 *
kamg@551 9 * This code is distributed in the hope that it will be useful, but WITHOUT
kamg@551 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
kamg@551 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
kamg@551 12 * version 2 for more details (a copy is included in the LICENSE file that
kamg@551 13 * accompanied this code).
kamg@551 14 *
kamg@551 15 * You should have received a copy of the GNU General Public License version
kamg@551 16 * 2 along with this work; if not, write to the Free Software Foundation,
kamg@551 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
kamg@551 18 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
kamg@551 22 *
kamg@551 23 */
kamg@551 24
stefank@2314 25 #include "precompiled.hpp"
stefank@2314 26 #include "classfile/javaClasses.hpp"
stefank@2314 27 #include "code/codeBlob.hpp"
stefank@2314 28 #include "memory/allocation.hpp"
stefank@2314 29 #include "prims/jvm.h"
stefank@2314 30 #include "runtime/dtraceJSDT.hpp"
stefank@2314 31 #include "runtime/jniHandles.hpp"
stefank@2314 32 #include "runtime/os.hpp"
stefank@2314 33 #include "utilities/exceptions.hpp"
stefank@2314 34 #include "utilities/globalDefinitions.hpp"
stefank@2314 35 #include "utilities/utf8.hpp"
kamg@551 36
kamg@551 37 #ifdef HAVE_DTRACE_H
kamg@551 38
kamg@551 39 jlong DTraceJSDT::activate(
kamg@551 40 jint version, jstring module_name, jint providers_count,
kamg@551 41 JVM_DTraceProvider* providers, TRAPS) {
kamg@551 42
kamg@551 43 size_t count = 0;
kamg@551 44 RegisteredProbes* probes = NULL;
kamg@551 45
kamg@551 46 if (!is_supported()) {
kamg@551 47 return 0;
kamg@551 48 }
kamg@551 49
kamg@551 50 assert(module_name != NULL, "valid module name");
kamg@551 51 assert(providers != NULL, "valid provider array");
kamg@551 52
kamg@551 53 for (int i = 0; i < providers_count; ++i) {
kamg@551 54 count += providers[i].probe_count;
kamg@551 55 }
kamg@551 56 probes = new RegisteredProbes(count);
kamg@551 57 count = 0;
kamg@551 58
kamg@551 59 for (int i = 0; i < providers_count; ++i) {
kamg@551 60 assert(providers[i].name != NULL, "valid provider name");
kamg@551 61 assert(providers[i].probe_count == 0 || providers[i].probes != NULL,
kamg@551 62 "valid probe count");
kamg@551 63 for (int j = 0; j < providers[i].probe_count; ++j) {
kamg@551 64 JVM_DTraceProbe* probe = &(providers[i].probes[j]);
kamg@551 65 assert(probe != NULL, "valid probe");
kamg@551 66 assert(probe->method != NULL, "valid method");
kamg@551 67 assert(probe->name != NULL, "valid probe name");
kamg@551 68 assert(probe->function != NULL, "valid probe function spec");
kamg@551 69 methodHandle h_method =
coleenp@4037 70 methodHandle(THREAD, Method::resolve_jmethod_id(probe->method));
kamg@551 71 nmethod* nm = AdapterHandlerLibrary::create_dtrace_nmethod(h_method);
kvn@1177 72 if (nm == NULL) {
kvn@1177 73 delete probes;
kvn@1177 74 THROW_MSG_0(vmSymbols::java_lang_RuntimeException(),
kvn@1177 75 "Unable to register DTrace probes (CodeCache: no room for DTrace nmethods).");
kvn@1177 76 }
iveresov@2138 77 h_method()->set_not_compilable();
kamg@551 78 h_method()->set_code(h_method, nm);
kamg@551 79 probes->nmethod_at_put(count++, nm);
kamg@551 80 }
kamg@551 81 }
kamg@551 82
kamg@551 83 int handle = pd_activate((void*)probes,
kamg@551 84 module_name, providers_count, providers);
kamg@3554 85 if (handle < 0) {
kamg@551 86 delete probes;
kamg@551 87 THROW_MSG_0(vmSymbols::java_lang_RuntimeException(),
kamg@551 88 "Unable to register DTrace probes (internal error).");
kamg@551 89 }
kamg@551 90 probes->set_helper_handle(handle);
kamg@551 91 return RegisteredProbes::toOpaqueProbes(probes);
kamg@551 92 }
kamg@551 93
kamg@551 94 jboolean DTraceJSDT::is_probe_enabled(jmethodID method) {
coleenp@4037 95 Method* m = Method::resolve_jmethod_id(method);
kamg@551 96 return nativeInstruction_at(m->code()->trap_address())->is_dtrace_trap();
kamg@551 97 }
kamg@551 98
kamg@551 99 void DTraceJSDT::dispose(OpaqueProbes probes) {
kamg@551 100 RegisteredProbes* p = RegisteredProbes::toRegisteredProbes(probes);
kamg@551 101 if (probes != -1 && p != NULL) {
kamg@551 102 pd_dispose(p->helper_handle());
kamg@551 103 delete p;
kamg@551 104 }
kamg@551 105 }
kamg@551 106
kamg@551 107 jboolean DTraceJSDT::is_supported() {
kamg@551 108 return pd_is_supported();
kamg@551 109 }
kamg@551 110
kamg@551 111 #else // HAVE_DTRACE_H
kamg@551 112
kamg@551 113 jlong DTraceJSDT::activate(
kamg@551 114 jint version, jstring module_name, jint providers_count,
kamg@551 115 JVM_DTraceProvider* providers, TRAPS) {
kamg@551 116 return 0;
kamg@551 117 }
kamg@551 118
kamg@551 119 jboolean DTraceJSDT::is_probe_enabled(jmethodID method) {
kamg@551 120 return false;
kamg@551 121 }
kamg@551 122
kamg@551 123 void DTraceJSDT::dispose(OpaqueProbes probes) {
kamg@551 124 return;
kamg@551 125 }
kamg@551 126
kamg@551 127 jboolean DTraceJSDT::is_supported() {
kamg@551 128 return false;
kamg@551 129 }
kamg@551 130
kamg@551 131 #endif // ndef HAVE_DTRACE_H

mercurial