annotate src/share/vm/prims/whitebox.cpp @ 6972:bd7a7ce2e264

6830717: replay of compilations would help with debugging Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method. Reviewed-by: kvn, twisti, sspitsyn Contributed-by: yumin.qi@oracle.com
author minqi
date Mon, 12 Nov 2012 14:03:53 -0800
parents da91efe96a93
children 4102b59539ce db9981fd3124
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1 /*
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
4 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
7 * published by the Free Software Foundation.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
8 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
13 * accompanied this code).
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
14 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
18 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
21 * questions.
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
22 *
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
23 */
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
24
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
25 #include "precompiled.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
26
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
27 #include "memory/universe.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
28 #include "oops/oop.inline.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
29
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
30 #include "classfile/symbolTable.hpp"
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
31 #include "classfile/classLoaderData.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
32
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
33 #include "prims/whitebox.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
34 #include "prims/wbtestmethods/parserTests.hpp"
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
35
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
36 #include "runtime/interfaceSupport.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
37 #include "runtime/os.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
38 #include "utilities/debug.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
39
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
40 #ifndef SERIALGC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
41 #include "gc_implementation/g1/concurrentMark.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
42 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
43 #include "gc_implementation/g1/heapRegionRemSet.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
44 #endif // !SERIALGC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
45
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
46 bool WhiteBox::_used = false;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
47
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
48 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
49 return (jlong)(void*)JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
50 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
51
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
52 WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
53 return heapOopSize;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
54 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
55
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
56
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
57 class WBIsKlassAliveClosure : public KlassClosure {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
58 Symbol* _name;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
59 bool _found;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
60 public:
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
61 WBIsKlassAliveClosure(Symbol* name) : _name(name), _found(false) {}
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
62
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
63 void do_klass(Klass* k) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
64 if (_found) return;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
65 Symbol* ksym = k->name();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
66 if (ksym->fast_compare(_name) == 0) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
67 _found = true;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
68 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
69 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
70
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
71 bool found() const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
72 return _found;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
73 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
74 };
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
75
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
76 WB_ENTRY(jboolean, WB_IsClassAlive(JNIEnv* env, jobject target, jstring name))
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
77 Handle h_name = JNIHandles::resolve(name);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
78 if (h_name.is_null()) return false;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
79 Symbol* sym = java_lang_String::as_symbol(h_name, CHECK_false);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
80 TempNewSymbol tsym(sym); // Make sure to decrement reference count on sym on return
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
81
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
82 WBIsKlassAliveClosure closure(sym);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
83 ClassLoaderDataGraph::classes_do(&closure);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
84
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
85 return closure.found();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
86 WB_END
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
87
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
88 #ifndef SERIALGC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
89 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
90 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
91 oop result = JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
92 const HeapRegion* hr = g1->heap_region_containing(result);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
93 return hr->isHumongous();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
94 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
95
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
96 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
97 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
98 size_t nr = g1->free_regions();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
99 return (jlong)nr;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
100 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
101
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
102 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
103 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
104 ConcurrentMark* cm = g1->concurrent_mark();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
105 return cm->concurrent_marking_in_progress();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
106 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
107
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
108 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
109 return (jint)HeapRegion::GrainBytes;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
110 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
111 #endif // !SERIALGC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
112
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
113 //Some convenience methods to deal with objects from java
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
114 int WhiteBox::offset_for_field(const char* field_name, oop object,
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
115 Symbol* signature_symbol) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
116 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
117 Thread* THREAD = Thread::current();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
118
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
119 //Get the class of our object
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
120 Klass* arg_klass = object->klass();
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
121 //Turn it into an instance-klass
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
122 InstanceKlass* ik = InstanceKlass::cast(arg_klass);
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
123
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
124 //Create symbols to look for in the class
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
125 TempNewSymbol name_symbol = SymbolTable::lookup(field_name, (int) strlen(field_name),
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
126 THREAD);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
127
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
128 //To be filled in with an offset of the field we're looking for
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
129 fieldDescriptor fd;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
130
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
131 Klass* res = ik->find_field(name_symbol, signature_symbol, &fd);
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
132 if (res == NULL) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
133 tty->print_cr("Invalid layout of %s at %s", ik->external_name(),
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
134 name_symbol->as_C_string());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
135 fatal("Invalid layout of preloaded class");
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
136 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
137
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
138 //fetch the field at the offset we've found
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
139 int dest_offset = fd.offset();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
140
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
141 return dest_offset;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
142 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
143
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
144
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
145 const char* WhiteBox::lookup_jstring(const char* field_name, oop object) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
146 int offset = offset_for_field(field_name, object,
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
147 vmSymbols::string_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
148 oop string = object->obj_field(offset);
6202
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
149 if (string == NULL) {
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
150 return NULL;
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
151 }
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
152 const char* ret = java_lang_String::as_utf8_string(string);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
153 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
154 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
155
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
156 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
157 int offset =
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
158 offset_for_field(field_name, object, vmSymbols::bool_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
159 bool ret = (object->bool_field(offset) == JNI_TRUE);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
160 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
161 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
162
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
163
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
164 #define CC (char*)
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
165
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
166 static JNINativeMethod methods[] = {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
167 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
168 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
169 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
170 {CC "parseCommandLine",
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
171 CC "(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
172 (void*) &WB_ParseCommandLine
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
173 },
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
174 #ifndef SERIALGC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
175 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
176 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
177 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
178 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
179 #endif // !SERIALGC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
180 };
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
181
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
182 #undef CC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
183
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
184 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
185 {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
186 if (WhiteBoxAPI) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
187 // Make sure that wbclass is loaded by the null classloader
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
188 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
189 Handle loader(ikh->class_loader());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
190 if (loader.is_null()) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
191 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
192 jint result = env->RegisterNatives(wbclass, methods, sizeof(methods)/sizeof(methods[0]));
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
193 if (result == 0) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
194 WhiteBox::set_used();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
195 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
196 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
197 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
198 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
199 JVM_END