annotate src/share/vm/prims/whitebox.cpp @ 12233:40136aa2cdb1

8010722: assert: failed: heap size is too big for compressed oops Summary: Use conservative assumptions of required alignment for the various garbage collector components into account when determining the maximum heap size that supports compressed oops. Using this conservative value avoids several circular dependencies in the calculation. Reviewed-by: stefank, dholmes
author tschatzl
date Wed, 11 Sep 2013 16:25:02 +0200
parents 5fd8e2fbafd4
children 9d8b29a0548c 8f07aa079343
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
12233
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
36 #include "runtime/arguments.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
37 #include "runtime/interfaceSupport.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
38 #include "runtime/os.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
39 #include "utilities/debug.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
40 #include "utilities/macros.hpp"
10341
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
41 #include "utilities/exceptions.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
42
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
43 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
44 #include "gc_implementation/g1/concurrentMark.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
45 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
46 #include "gc_implementation/g1/heapRegionRemSet.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
47 #endif // INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
48
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
49 #ifdef INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
50 #include "services/memTracker.hpp"
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
51 #endif // INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
52
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
53 #include "compiler/compileBroker.hpp"
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
54 #include "runtime/compilationPolicy.hpp"
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
55
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
56 bool WhiteBox::_used = false;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
57
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
58 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
59 return (jlong)(void*)JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
60 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
61
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
62 WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
63 return heapOopSize;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
64 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
65
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
66
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
67 class WBIsKlassAliveClosure : public KlassClosure {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
68 Symbol* _name;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
69 bool _found;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
70 public:
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
71 WBIsKlassAliveClosure(Symbol* name) : _name(name), _found(false) {}
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
72
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
73 void do_klass(Klass* k) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
74 if (_found) return;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
75 Symbol* ksym = k->name();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
76 if (ksym->fast_compare(_name) == 0) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
77 _found = true;
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 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
80
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
81 bool found() const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
82 return _found;
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 };
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
85
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
86 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
87 Handle h_name = JNIHandles::resolve(name);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
88 if (h_name.is_null()) return false;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
89 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
90 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
91
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
92 WBIsKlassAliveClosure closure(sym);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
93 ClassLoaderDataGraph::classes_do(&closure);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
94
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
95 return closure.found();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
96 WB_END
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
97
12233
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
98 WB_ENTRY(jlong, WB_GetCompressedOopsMaxHeapSize(JNIEnv* env, jobject o)) {
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
99 return (jlong)Arguments::max_heap_for_compressed_oops();
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
100 }
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
101 WB_END
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
102
10241
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
103 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
104 CollectorPolicy * p = Universe::heap()->collector_policy();
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
105 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
106 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
107 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
108 p->min_alignment(), p->max_alignment());
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
109 }
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
110 WB_END
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
111
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
112 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
113 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
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 oop result = JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
116 const HeapRegion* hr = g1->heap_region_containing(result);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
117 return hr->isHumongous();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
118 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
119
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
120 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
121 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
122 size_t nr = g1->free_regions();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
123 return (jlong)nr;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
124 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
125
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
126 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
127 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
128 ConcurrentMark* cm = g1->concurrent_mark();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
129 return cm->concurrent_marking_in_progress();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
130 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
131
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
132 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
133 return (jint)HeapRegion::GrainBytes;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
134 WB_END
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
135 #endif // INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
136
12118
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
137 #if INCLUDE_NMT
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
138 // 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
139 // NMT picks it up correctly
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
140 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
141 jlong addr = 0;
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
142
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
143 if (MemTracker::is_on() && !MemTracker::shutdown_in_progress()) {
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
144 addr = (jlong)(uintptr_t)os::malloc(size, mtTest);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
145 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
146
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
147 return addr;
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
148 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
149
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
150 // Free the memory allocated by NMTAllocTest
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
151 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
152 os::free((void*)(uintptr_t)mem, mtTest);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
153 WB_END
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
154
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
155 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
156 jlong addr = 0;
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
157
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
158 if (MemTracker::is_on() && !MemTracker::shutdown_in_progress()) {
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
159 addr = (jlong)(uintptr_t)os::reserve_memory(size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
160 MemTracker::record_virtual_memory_type((address)addr, mtTest);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
161 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
162
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
163 return addr;
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
164 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
165
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
166
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
167 WB_ENTRY(void, WB_NMTCommitMemory(JNIEnv* env, jobject o, jlong addr, jlong size))
10969
a837fa3d3f86 8013057: assert(_needs_gc || SafepointSynchronize::is_at_safepoint()) failed: only read at safepoint
dcubed
parents: 10341
diff changeset
168 os::commit_memory((char *)(uintptr_t)addr, size, !ExecMem);
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
169 MemTracker::record_virtual_memory_type((address)(uintptr_t)addr, mtTest);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
170 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
171
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
172 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
173 os::uncommit_memory((char *)(uintptr_t)addr, size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
174 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
175
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
176 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
177 os::release_memory((char *)(uintptr_t)addr, size);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
178 WB_END
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 // 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
181 WB_ENTRY(jboolean, WB_NMTWaitForDataMerge(JNIEnv* env))
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 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) {
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
184 return false;
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
185 }
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
186
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
187 return MemTracker::wbtest_wait_for_data_merge();
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
188 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
189
12118
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
190 WB_ENTRY(jboolean, WB_NMTIsDetailSupported(JNIEnv* env))
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
191 return MemTracker::tracking_level() == MemTracker::NMT_detail;
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
192 WB_END
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
193
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
194 #endif // INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
195
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
196 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
197 assert(method != NULL, "method should not be null");
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
198 ThreadToNativeFromVM ttn(thread);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
199 return env->FromReflectedMethod(method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
200 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
201
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
202 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
203 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
204 CodeCache::mark_all_nmethods_for_deoptimization();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
205 VM_Deoptimize op;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
206 VMThread::execute(&op);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
207 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
208
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
209 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
210 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
211 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
212 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
213 int result = 0;
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
214 nmethod* code;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
215 if (is_osr) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
216 int bci = InvocationEntryBci;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
217 while ((code = mh->lookup_osr_nmethod_for(bci, CompLevel_none, false)) != NULL) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
218 code->mark_for_deoptimization();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
219 ++result;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
220 bci = code->osr_entry_bci() + 1;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
221 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
222 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
223 code = mh->code();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
224 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
225 if (code != NULL) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
226 code->mark_for_deoptimization();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
227 ++result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
228 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
229 result += CodeCache::mark_for_deoptimization(mh());
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
230 if (result > 0) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
231 VM_Deoptimize op;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
232 VMThread::execute(&op);
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 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
235 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
236
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
237 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
238 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
239 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
240 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
241 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
242 if (code == NULL) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
243 return JNI_FALSE;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
244 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
245 return (code->is_alive() && !code->is_marked_for_deoptimization());
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
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
248 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
249 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
250 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
251 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
252 if (is_osr) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
253 return CompilationPolicy::can_be_osr_compiled(mh, comp_level);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
254 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
255 return CompilationPolicy::can_be_compiled(mh, comp_level);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
256 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
257 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
258
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
259 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
260 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
261 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
262 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
263 return mh->queued_for_compilation();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
264 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
265
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
266 WB_ENTRY(jint, WB_GetMethodCompilationLevel(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
267 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
268 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
269 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
270 return (code != NULL ? code->comp_level() : CompLevel_none);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
271 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
272
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
273 WB_ENTRY(void, WB_MakeMethodNotCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
274 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
275 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
276 if (is_osr) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
277 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
278 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
279 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
280 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
281 WB_END
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
282
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
283 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method))
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
284 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
285 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
286 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
287 return (code != NULL && code->is_osr_method() ? code->osr_entry_bci() : InvocationEntryBci);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
288 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
289
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
290 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
291 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
292 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
293 bool result = mh->dont_inline();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
294 mh->set_dont_inline(value == JNI_TRUE);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
295 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
296 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
297
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
298 WB_ENTRY(jint, WB_GetCompileQueueSize(JNIEnv* env, jobject o, jint comp_level))
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
299 if (comp_level == CompLevel_any) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
300 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ +
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
301 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
302 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
303 return CompileBroker::queue_size(comp_level);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
304 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
305 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
306
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
307 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
308 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
309 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
310 bool result = mh->force_inline();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
311 mh->set_force_inline(value == JNI_TRUE);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
312 return result;
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
313 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
314
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
315 WB_ENTRY(jboolean, WB_EnqueueMethodForCompilation(JNIEnv* env, jobject o, jobject method, jint comp_level, jint bci))
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
316 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
317 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
318 nmethod* nm = CompileBroker::compile_method(mh, bci, comp_level, mh, mh->invocation_count(), "WhiteBox", THREAD);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
319 MutexLockerEx mu(Compile_lock);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
320 return (mh->queued_for_compilation() || nm != NULL);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
321 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
322
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
323 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
324 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
325 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
326 MutexLockerEx mu(Compile_lock);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
327 MethodData* mdo = mh->method_data();
10107
jiangli
parents: 9085
diff changeset
328 MethodCounters* mcs = mh->method_counters();
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
329
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
330 if (mdo != NULL) {
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
331 mdo->init();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
332 ResourceMark rm;
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
333 int arg_count = mdo->method()->size_of_parameters();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
334 for (int i = 0; i < arg_count; i++) {
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
335 mdo->set_arg_modified(i, 0);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
336 }
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
337 }
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
338
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
339 mh->clear_not_c1_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
340 mh->clear_not_c2_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
341 mh->clear_not_c2_osr_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
342 NOT_PRODUCT(mh->set_compiled_invocation_count(0));
10107
jiangli
parents: 9085
diff changeset
343 if (mcs != NULL) {
jiangli
parents: 9085
diff changeset
344 mcs->backedge_counter()->init();
jiangli
parents: 9085
diff changeset
345 mcs->invocation_counter()->init();
jiangli
parents: 9085
diff changeset
346 mcs->set_interpreter_invocation_count(0);
jiangli
parents: 9085
diff changeset
347 mcs->set_interpreter_throwout_count(0);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
348
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
349 #ifdef TIERED
10107
jiangli
parents: 9085
diff changeset
350 mcs->set_rate(0.0F);
jiangli
parents: 9085
diff changeset
351 mh->set_prev_event_count(0, THREAD);
jiangli
parents: 9085
diff changeset
352 mh->set_prev_time(0, THREAD);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
353 #endif
10107
jiangli
parents: 9085
diff changeset
354 }
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
355 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
356
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
357 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString))
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
358 ResourceMark rm(THREAD);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
359 int len;
10155
f258c5828eb8 8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents: 10116
diff changeset
360 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
361 return (StringTable::lookup(name, len) != NULL);
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
362 WB_END
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
363
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
364 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
365 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
366 Universe::heap()->collect(GCCause::_last_ditch_collection);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
367 WB_END
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
368
10157
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
369
10341
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
370 WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o))
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
371 // static+volatile in order to force the read to happen
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
372 // (not be eliminated by the compiler)
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
373 static char c;
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
374 static volatile char* p;
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
375
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
376 p = os::reserve_memory(os::vm_allocation_granularity(), NULL, 0);
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
377 if (p == NULL) {
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
378 THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(), "Failed to reserve memory");
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
379 }
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
380
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
381 c = *p;
10157
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
382 WB_END
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
383
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
384 //Some convenience methods to deal with objects from java
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
385 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
386 Symbol* signature_symbol) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
387 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
388 Thread* THREAD = Thread::current();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
389
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
390 //Get the class of our object
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
391 Klass* arg_klass = object->klass();
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
392 //Turn it into an instance-klass
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
393 InstanceKlass* ik = InstanceKlass::cast(arg_klass);
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
394
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
395 //Create symbols to look for in the class
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
396 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
397 THREAD);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
398
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
399 //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
400 fieldDescriptor fd;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
401
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
402 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
403 if (res == NULL) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
404 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
405 name_symbol->as_C_string());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
406 fatal("Invalid layout of preloaded class");
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
407 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
408
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
409 //fetch the field at the offset we've found
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
410 int dest_offset = fd.offset();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
411
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
412 return dest_offset;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
413 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
414
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
415
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
416 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
417 int offset = offset_for_field(field_name, object,
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
418 vmSymbols::string_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
419 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
420 if (string == NULL) {
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
421 return NULL;
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
422 }
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
423 const char* ret = java_lang_String::as_utf8_string(string);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
424 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
425 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
426
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
427 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
428 int offset =
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
429 offset_for_field(field_name, object, vmSymbols::bool_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
430 bool ret = (object->bool_field(offset) == JNI_TRUE);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
431 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
432 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
433
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
434
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
435 #define CC (char*)
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
436
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
437 static JNINativeMethod methods[] = {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
438 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
439 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
440 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
441 {CC"parseCommandLine",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
442 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
443 (void*) &WB_ParseCommandLine
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
444 },
12233
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
445 {CC"getCompressedOopsMaxHeapSize", CC"()J",
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
446 (void*)&WB_GetCompressedOopsMaxHeapSize},
10241
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
447 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
448 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
449 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
450 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
451 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
452 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
453 #endif // INCLUDE_ALL_GCS
12118
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
454 #if INCLUDE_NMT
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
455 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
456 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
457 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
458 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
459 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
460 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
461 {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
12118
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
462 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported},
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
463 #endif // INCLUDE_NMT
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
464 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
465 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
466 (void*)&WB_DeoptimizeMethod },
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
467 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
468 (void*)&WB_IsMethodCompiled },
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
469 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Executable;IZ)Z",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
470 (void*)&WB_IsMethodCompilable},
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
471 {CC"isMethodQueuedForCompilation",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
472 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation},
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
473 {CC"makeMethodNotCompilable",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
474 CC"(Ljava/lang/reflect/Executable;IZ)V", (void*)&WB_MakeMethodNotCompilable},
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
475 {CC"testSetDontInlineMethod",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
476 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
477 {CC"getMethodCompilationLevel",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
478 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel},
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
479 {CC"getMethodEntryBci",
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
480 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci},
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
481 {CC"getCompileQueueSize",
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
482 CC"(I)I", (void*)&WB_GetCompileQueueSize},
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
483 {CC"testSetForceInlineMethod",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
484 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
485 {CC"enqueueMethodForCompilation",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
486 CC"(Ljava/lang/reflect/Executable;II)Z", (void*)&WB_EnqueueMethodForCompilation},
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
487 {CC"clearMethodState",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
488 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState},
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
489 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
490 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
10341
f54c85acc043 8013726: runtime/memory/ReserveMemory.java fails due to 'assert(bytes % os::vm_allocation_granularity() == 0) failed: reserve block size'
mikael
parents: 10241
diff changeset
491 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
492 };
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
493
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
494 #undef CC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
495
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
496 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
497 {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
498 if (WhiteBoxAPI) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
499 // Make sure that wbclass is loaded by the null classloader
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
500 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
501 Handle loader(ikh->class_loader());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
502 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
503 ResourceMark rm;
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
504 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
505 bool result = true;
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
506 // 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
507 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
508 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
509 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
510 result = false;
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
511 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
512 // 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
513 // ignoring the exception
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
514 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
515 env->ExceptionClear();
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
516 } else {
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
517 // 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
518 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
519 env->UnregisterNatives(wbclass);
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
520 break;
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
521 }
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
522 }
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
523 }
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
524
dc7db03f5aa2 8012337: Change Whitebox implementation to make absence of method in Whitebox.class not fatal
iignatyev
parents: 10116
diff changeset
525 if (result) {
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
526 WhiteBox::set_used();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
527 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
528 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
529 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
530 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
531 JVM_END