annotate src/share/vm/prims/whitebox.cpp @ 10241:d17700c82d7d

8006088: Incompatible heap size flags accepted by VM Summary: Make processing of minimum, initial and maximum heap size more intiutive by removing previous limitations on allowed values, and make error reporting consistent. Further, fix errors in ergonomic heap sizing. Reviewed-by: johnc, jwilhelm, tamao
author tschatzl
date Mon, 06 May 2013 17:19:42 +0200
parents 9ce110b1d14a
children f54c85acc043
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 /*
10155
f258c5828eb8 8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents: 10116
diff changeset
2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
5915
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"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
39 #include "utilities/macros.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
40
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
41 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
42 #include "gc_implementation/g1/concurrentMark.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
43 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
44 #include "gc_implementation/g1/heapRegionRemSet.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
45 #endif // INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
46
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
47 #ifdef INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
48 #include "services/memTracker.hpp"
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
49 #endif // INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
50
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
51 #include "compiler/compileBroker.hpp"
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
52 #include "runtime/compilationPolicy.hpp"
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
53
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
54 bool WhiteBox::_used = false;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
55
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
56 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
57 return (jlong)(void*)JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
58 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
59
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
60 WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
61 return heapOopSize;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
62 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
63
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
64
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
65 class WBIsKlassAliveClosure : public KlassClosure {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
66 Symbol* _name;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
67 bool _found;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
68 public:
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
69 WBIsKlassAliveClosure(Symbol* name) : _name(name), _found(false) {}
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 void do_klass(Klass* k) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
72 if (_found) return;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
73 Symbol* ksym = k->name();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
74 if (ksym->fast_compare(_name) == 0) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
75 _found = true;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
76 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
77 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
78
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
79 bool found() const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
80 return _found;
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 };
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
83
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
84 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
85 Handle h_name = JNIHandles::resolve(name);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
86 if (h_name.is_null()) return false;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
87 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
88 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
89
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
90 WBIsKlassAliveClosure closure(sym);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
91 ClassLoaderDataGraph::classes_do(&closure);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
92
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
93 return closure.found();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
94 WB_END
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
95
10241
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
96 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
97 CollectorPolicy * p = Universe::heap()->collector_policy();
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
98 gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap "
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
99 SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT,
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
100 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
101 p->min_alignment(), p->max_alignment());
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
102 }
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
103 WB_END
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
104
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
105 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
106 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
107 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
108 oop result = JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
109 const HeapRegion* hr = g1->heap_region_containing(result);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
110 return hr->isHumongous();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
111 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
112
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
113 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
114 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
115 size_t nr = g1->free_regions();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
116 return (jlong)nr;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
117 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
118
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
119 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
120 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
121 ConcurrentMark* cm = g1->concurrent_mark();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
122 return cm->concurrent_marking_in_progress();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
123 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
124
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
125 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
126 return (jint)HeapRegion::GrainBytes;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
127 WB_END
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
128 #endif // INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
129
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
130 #ifdef INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
131 // Alloc memory using the test memory type so that we can use that to see if
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
132 // NMT picks it up correctly
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
133 WB_ENTRY(jlong, WB_NMTMalloc(JNIEnv* env, jobject o, jlong size))
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
134 jlong addr = 0;
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
135
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
136 if (MemTracker::is_on() && !MemTracker::shutdown_in_progress()) {
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
137 addr = (jlong)(uintptr_t)os::malloc(size, mtTest);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
138 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
139
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
140 return addr;
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
141 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
142
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
143 // Free the memory allocated by NMTAllocTest
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
144 WB_ENTRY(void, WB_NMTFree(JNIEnv* env, jobject o, jlong mem))
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
145 os::free((void*)(uintptr_t)mem, mtTest);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
146 WB_END
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
147
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
148 WB_ENTRY(jlong, WB_NMTReserveMemory(JNIEnv* env, jobject o, jlong size))
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
149 jlong addr = 0;
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
150
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
151 if (MemTracker::is_on() && !MemTracker::shutdown_in_progress()) {
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
152 addr = (jlong)(uintptr_t)os::reserve_memory(size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
153 MemTracker::record_virtual_memory_type((address)addr, mtTest);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
154 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
155
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
156 return addr;
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
157 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
158
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
159
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
160 WB_ENTRY(void, WB_NMTCommitMemory(JNIEnv* env, jobject o, jlong addr, jlong size))
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
161 os::commit_memory((char *)(uintptr_t)addr, size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
162 MemTracker::record_virtual_memory_type((address)(uintptr_t)addr, mtTest);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
163 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
164
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
165 WB_ENTRY(void, WB_NMTUncommitMemory(JNIEnv* env, jobject o, jlong addr, jlong size))
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
166 os::uncommit_memory((char *)(uintptr_t)addr, size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
167 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
168
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
169 WB_ENTRY(void, WB_NMTReleaseMemory(JNIEnv* env, jobject o, jlong addr, jlong size))
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
170 os::release_memory((char *)(uintptr_t)addr, size);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
171 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
172
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
173 // Block until the current generation of NMT data to be merged, used to reliably test the NMT feature
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
174 WB_ENTRY(jboolean, WB_NMTWaitForDataMerge(JNIEnv* env))
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
175
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
176 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) {
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
177 return false;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
178 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
179
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
180 return MemTracker::wbtest_wait_for_data_merge();
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
181 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
182
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
183 #endif // INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
184
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
185 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
186 assert(method != NULL, "method should not be null");
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
187 ThreadToNativeFromVM ttn(thread);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
188 return env->FromReflectedMethod(method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
189 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
190
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
191 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
192 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
193 CodeCache::mark_all_nmethods_for_deoptimization();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
194 VM_Deoptimize op;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
195 VMThread::execute(&op);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
196 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
197
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
198 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
199 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
200 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
201 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
202 int result = 0;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
203 nmethod* code = mh->code();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
204 if (code != NULL) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
205 code->mark_for_deoptimization();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
206 ++result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
207 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
208 result += CodeCache::mark_for_deoptimization(mh());
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
209 if (result > 0) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
210 VM_Deoptimize op;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
211 VMThread::execute(&op);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
212 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
213 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
214 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
215
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
216 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
217 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
218 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
219 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
220 nmethod* code = mh->code();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
221 if (code == NULL) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
222 return JNI_FALSE;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
223 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
224 return (code->is_alive() && !code->is_marked_for_deoptimization());
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
225 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
226
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
227 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level))
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
228 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
229 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
230 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
231 return CompilationPolicy::can_be_compiled(mh, comp_level);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
232 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
233
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
234 WB_ENTRY(jboolean, WB_IsMethodQueuedForCompilation(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
235 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
236 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
237 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
238 return mh->queued_for_compilation();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
239 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
240
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
241 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
242 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
243 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
244 nmethod* code = mh->code();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
245 return (code != NULL ? code->comp_level() : CompLevel_none);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
246 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
247
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
248
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
249 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level))
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
250 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
251 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
252 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox");
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
253 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
254
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
255 WB_ENTRY(jboolean, WB_TestSetDontInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
256 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
257 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
258 bool result = mh->dont_inline();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
259 mh->set_dont_inline(value == JNI_TRUE);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
260 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
261 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
262
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
263 WB_ENTRY(jint, WB_GetCompileQueuesSize(JNIEnv* env, jobject o))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
264 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ +
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
265 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
266 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
267
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
268
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
269 WB_ENTRY(jboolean, WB_TestSetForceInlineMethod(JNIEnv* env, jobject o, jobject method, jboolean value))
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
270 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
271 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
272 bool result = mh->force_inline();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
273 mh->set_force_inline(value == JNI_TRUE);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
274 return result;
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
275 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
276
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
277 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level))
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
278 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
279 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
280 nmethod* nm = CompileBroker::compile_method(mh, InvocationEntryBci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
281 MutexLockerEx mu(Compile_lock);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
282 return (mh->queued_for_compilation() || nm != NULL);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
283 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
284
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
285 WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
286 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
287 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
288 MutexLockerEx mu(Compile_lock);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
289 MethodData* mdo = mh->method_data();
10107
jiangli
parents: 9085
diff changeset
290 MethodCounters* mcs = mh->method_counters();
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
291
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
292 if (mdo != NULL) {
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
293 mdo->init();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
294 ResourceMark rm;
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
295 int arg_count = mdo->method()->size_of_parameters();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
296 for (int i = 0; i < arg_count; i++) {
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
297 mdo->set_arg_modified(i, 0);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
298 }
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
299 }
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
300
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
301 mh->clear_not_c1_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
302 mh->clear_not_c2_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
303 mh->clear_not_c2_osr_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
304 NOT_PRODUCT(mh->set_compiled_invocation_count(0));
10107
jiangli
parents: 9085
diff changeset
305 if (mcs != NULL) {
jiangli
parents: 9085
diff changeset
306 mcs->backedge_counter()->init();
jiangli
parents: 9085
diff changeset
307 mcs->invocation_counter()->init();
jiangli
parents: 9085
diff changeset
308 mcs->set_interpreter_invocation_count(0);
jiangli
parents: 9085
diff changeset
309 mcs->set_interpreter_throwout_count(0);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
310
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
311 #ifdef TIERED
10107
jiangli
parents: 9085
diff changeset
312 mcs->set_rate(0.0F);
jiangli
parents: 9085
diff changeset
313 mh->set_prev_event_count(0, THREAD);
jiangli
parents: 9085
diff changeset
314 mh->set_prev_time(0, THREAD);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
315 #endif
10107
jiangli
parents: 9085
diff changeset
316 }
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
317 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
318
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
319 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString))
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
320 ResourceMark rm(THREAD);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
321 int len;
10155
f258c5828eb8 8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents: 10116
diff changeset
322 jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false);
f258c5828eb8 8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents: 10116
diff changeset
323 return (StringTable::lookup(name, len) != NULL);
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
324 WB_END
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
325
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
326
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
327 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
328 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
329 Universe::heap()->collect(GCCause::_last_ditch_collection);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
330 WB_END
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
331
10157
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
332
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
333 WB_ENTRY(jlong, WB_ReserveMemory(JNIEnv* env, jobject o, jlong size))
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
334 return (jlong)os::reserve_memory(size, NULL, 0);
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
335 WB_END
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
336
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
337 //Some convenience methods to deal with objects from java
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
338 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
339 Symbol* signature_symbol) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
340 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
341 Thread* THREAD = Thread::current();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
342
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
343 //Get the class of our object
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
344 Klass* arg_klass = object->klass();
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
345 //Turn it into an instance-klass
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
346 InstanceKlass* ik = InstanceKlass::cast(arg_klass);
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
347
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
348 //Create symbols to look for in the class
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
349 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
350 THREAD);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
351
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
352 //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
353 fieldDescriptor fd;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
354
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
355 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
356 if (res == NULL) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
357 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
358 name_symbol->as_C_string());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
359 fatal("Invalid layout of preloaded class");
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
360 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
361
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
362 //fetch the field at the offset we've found
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
363 int dest_offset = fd.offset();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
364
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
365 return dest_offset;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
366 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
367
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
368
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
369 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
370 int offset = offset_for_field(field_name, object,
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
371 vmSymbols::string_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
372 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
373 if (string == NULL) {
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
374 return NULL;
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
375 }
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
376 const char* ret = java_lang_String::as_utf8_string(string);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
377 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
378 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
379
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
380 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
381 int offset =
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
382 offset_for_field(field_name, object, vmSymbols::bool_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
383 bool ret = (object->bool_field(offset) == JNI_TRUE);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
384 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
385 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
386
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
387
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
388 #define CC (char*)
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
389
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
390 static JNINativeMethod methods[] = {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
391 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
392 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
393 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
394 {CC"parseCommandLine",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
395 CC"(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
396 (void*) &WB_ParseCommandLine
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
397 },
10241
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
398 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
399 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
400 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
401 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
402 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
403 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
404 #endif // INCLUDE_ALL_GCS
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
405 #ifdef INCLUDE_NMT
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
406 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
407 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
408 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
409 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
410 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
411 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
412 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
413 #endif // INCLUDE_NMT
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
414 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
415 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;)I",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
416 (void*)&WB_DeoptimizeMethod },
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
417 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;)Z",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
418 (void*)&WB_IsMethodCompiled },
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
419 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Executable;I)Z",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
420 (void*)&WB_IsMethodCompilable},
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
421 {CC"isMethodQueuedForCompilation",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
422 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation},
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
423 {CC"makeMethodNotCompilable",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
424 CC"(Ljava/lang/reflect/Executable;I)V", (void*)&WB_MakeMethodNotCompilable},
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
425 {CC"testSetDontInlineMethod",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
426 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetDontInlineMethod},
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
427 {CC"getMethodCompilationLevel",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
428 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodCompilationLevel},
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
429 {CC"getCompileQueuesSize",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
430 CC"()I", (void*)&WB_GetCompileQueuesSize},
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
431 {CC"testSetForceInlineMethod",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
432 CC"(Ljava/lang/reflect/Executable;Z)Z", (void*)&WB_TestSetForceInlineMethod},
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
433 {CC"enqueueMethodForCompilation",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
434 CC"(Ljava/lang/reflect/Executable;I)Z", (void*)&WB_EnqueueMethodForCompilation},
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
435 {CC"clearMethodState",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
436 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState},
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
437 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
438 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
10157
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
439
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
440 {CC"reserveMemory", CC"(J)J", (void*)&WB_ReserveMemory },
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
441 };
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
442
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
443 #undef CC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
444
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
445 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
446 {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
447 if (WhiteBoxAPI) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
448 // Make sure that wbclass is loaded by the null classloader
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
449 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
450 Handle loader(ikh->class_loader());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
451 if (loader.is_null()) {
10196
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
452 ResourceMark rm;
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
453 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
10196
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
454 bool result = true;
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
455 // one by one registration natives for exception catching
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
456 jclass exceptionKlass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string());
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
457 for (int i = 0, n = sizeof(methods) / sizeof(methods[0]); i < n; ++i) {
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
458 if (env->RegisterNatives(wbclass, methods + i, 1) != 0) {
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
459 result = false;
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
460 if (env->ExceptionCheck() && env->IsInstanceOf(env->ExceptionOccurred(), exceptionKlass)) {
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
461 // j.l.NoSuchMethodError is thrown when a method can't be found or a method is not native
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
462 // ignoring the exception
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
463 tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s", methods[i].name, methods[i].signature);
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
464 env->ExceptionClear();
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
465 } else {
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
466 // register is failed w/o exception or w/ unexpected exception
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
467 tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered", methods[i].name, methods[i].signature);
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
468 env->UnregisterNatives(wbclass);
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
469 break;
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
470 }
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
471 }
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
472 }
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
473
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
474 if (result) {
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
475 WhiteBox::set_used();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
476 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
477 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
478 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
479 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
480 JVM_END