annotate src/share/vm/prims/whitebox.cpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents b509b7ff561c
children 417e3b8d04c5
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 /*
17817
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
2 * Copyright (c) 2012, 2014, 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
20278
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
27 #include "memory/metadataFactory.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
28 #include "memory/universe.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
29 #include "oops/oop.inline.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
30
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
31 #include "classfile/symbolTable.hpp"
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
32 #include "classfile/classLoaderData.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
33
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
34 #include "prims/whitebox.hpp"
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
35 #include "prims/wbtestmethods/parserTests.hpp"
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
36
12233
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
37 #include "runtime/arguments.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
38 #include "runtime/interfaceSupport.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
39 #include "runtime/os.hpp"
20278
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
40 #include "utilities/array.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
41 #include "utilities/debug.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
42 #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
43 #include "utilities/exceptions.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
44
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
45 #if INCLUDE_ALL_GCS
20357
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
46 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp"
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
47 #include "gc_implementation/g1/concurrentMark.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
48 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
49 #include "gc_implementation/g1/heapRegionRemSet.hpp"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
50 #endif // INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
51
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
52 #if INCLUDE_NMT
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
53 #include "services/mallocSiteTable.hpp"
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
54 #include "services/memTracker.hpp"
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
55 #include "utilities/nativeCallStack.hpp"
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
56 #endif // INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
57
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
58 #include "compiler/compileBroker.hpp"
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
59 #include "runtime/compilationPolicy.hpp"
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
60
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17867
diff changeset
61 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 17867
diff changeset
62
13053
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
63 #define SIZE_T_MAX_VALUE ((size_t) -1)
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
64
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
65 bool WhiteBox::_used = false;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
66
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
67 WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
68 return (jlong)(void*)JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
69 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
70
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
71 WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
72 return heapOopSize;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
73 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
74
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
75
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
76 class WBIsKlassAliveClosure : public KlassClosure {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
77 Symbol* _name;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
78 bool _found;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
79 public:
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
80 WBIsKlassAliveClosure(Symbol* name) : _name(name), _found(false) {}
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 void do_klass(Klass* k) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
83 if (_found) return;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
84 Symbol* ksym = k->name();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
85 if (ksym->fast_compare(_name) == 0) {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
86 _found = true;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
87 }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
88 }
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 bool found() const {
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
91 return _found;
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 };
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 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
96 Handle h_name = JNIHandles::resolve(name);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
97 if (h_name.is_null()) return false;
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
98 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
99 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
100
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
101 WBIsKlassAliveClosure closure(sym);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
102 ClassLoaderDataGraph::classes_do(&closure);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
103
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
104 return closure.found();
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
105 WB_END
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
106
12233
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
107 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
108 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
109 }
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
110 WB_END
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
111
10241
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
112 WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) {
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
113 CollectorPolicy * p = Universe::heap()->collector_policy();
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
114 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
115 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
116 p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(),
13060
8f07aa079343 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 12233
diff changeset
117 p->space_alignment(), p->heap_alignment());
10241
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
118 }
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
119 WB_END
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
120
13053
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
121 #ifndef PRODUCT
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
122 // Forward declaration
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
123 void TestReservedSpace_test();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
124 void TestReserveMemorySpecial_test();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
125 void TestVirtualSpace_test();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
126 void TestMetaspaceAux_test();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
127 #endif
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
128
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
129 WB_ENTRY(void, WB_RunMemoryUnitTests(JNIEnv* env, jobject o))
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
130 #ifndef PRODUCT
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
131 TestReservedSpace_test();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
132 TestReserveMemorySpecial_test();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
133 TestVirtualSpace_test();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
134 TestMetaspaceAux_test();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
135 #endif
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
136 WB_END
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
137
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
138 WB_ENTRY(void, WB_ReadFromNoaccessArea(JNIEnv* env, jobject o))
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
139 size_t granularity = os::vm_allocation_granularity();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
140 ReservedHeapSpace rhs(100 * granularity, granularity, false, NULL);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
141 VirtualSpace vs;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
142 vs.initialize(rhs, 50 * granularity);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
143
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
144 //Check if constraints are complied
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
145 if (!( UseCompressedOops && rhs.base() != NULL &&
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
146 Universe::narrow_oop_base() != NULL &&
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
147 Universe::narrow_oop_use_implicit_null_checks() )) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
148 tty->print_cr("WB_ReadFromNoaccessArea method is useless:\n "
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
149 "\tUseCompressedOops is %d\n"
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
150 "\trhs.base() is "PTR_FORMAT"\n"
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
151 "\tUniverse::narrow_oop_base() is "PTR_FORMAT"\n"
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
152 "\tUniverse::narrow_oop_use_implicit_null_checks() is %d",
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
153 UseCompressedOops,
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
154 rhs.base(),
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
155 Universe::narrow_oop_base(),
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
156 Universe::narrow_oop_use_implicit_null_checks());
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
157 return;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
158 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
159 tty->print_cr("Reading from no access area... ");
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
160 tty->print_cr("*(vs.low_boundary() - rhs.noaccess_prefix() / 2 ) = %c",
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
161 *(vs.low_boundary() - rhs.noaccess_prefix() / 2 ));
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
162 WB_END
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
163
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
164 static jint wb_stress_virtual_space_resize(size_t reserved_space_size,
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
165 size_t magnitude, size_t iterations) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
166 size_t granularity = os::vm_allocation_granularity();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
167 ReservedHeapSpace rhs(reserved_space_size * granularity, granularity, false, NULL);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
168 VirtualSpace vs;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
169 if (!vs.initialize(rhs, 0)) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
170 tty->print_cr("Failed to initialize VirtualSpace. Can't proceed.");
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
171 return 3;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
172 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
173
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
174 long seed = os::random();
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
175 tty->print_cr("Random seed is %ld", seed);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
176 os::init_random(seed);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
177
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
178 for (size_t i = 0; i < iterations; i++) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
179
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
180 // Whether we will shrink or grow
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
181 bool shrink = os::random() % 2L == 0;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
182
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
183 // Get random delta to resize virtual space
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
184 size_t delta = (size_t)os::random() % magnitude;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
185
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
186 // If we are about to shrink virtual space below zero, then expand instead
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
187 if (shrink && vs.committed_size() < delta) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
188 shrink = false;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
189 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
190
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
191 // Resizing by delta
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
192 if (shrink) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
193 vs.shrink_by(delta);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
194 } else {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
195 // If expanding fails expand_by will silently return false
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
196 vs.expand_by(delta, true);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
197 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
198 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
199 return 0;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
200 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
201
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
202 WB_ENTRY(jint, WB_StressVirtualSpaceResize(JNIEnv* env, jobject o,
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
203 jlong reserved_space_size, jlong magnitude, jlong iterations))
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
204 tty->print_cr("reservedSpaceSize="JLONG_FORMAT", magnitude="JLONG_FORMAT", "
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
205 "iterations="JLONG_FORMAT"\n", reserved_space_size, magnitude,
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
206 iterations);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
207 if (reserved_space_size < 0 || magnitude < 0 || iterations < 0) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
208 tty->print_cr("One of variables printed above is negative. Can't proceed.\n");
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
209 return 1;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
210 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
211
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
212 // sizeof(size_t) depends on whether OS is 32bit or 64bit. sizeof(jlong) is
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
213 // always 8 byte. That's why we should avoid overflow in case of 32bit platform.
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
214 if (sizeof(size_t) < sizeof(jlong)) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
215 jlong size_t_max_value = (jlong) SIZE_T_MAX_VALUE;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
216 if (reserved_space_size > size_t_max_value || magnitude > size_t_max_value
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
217 || iterations > size_t_max_value) {
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
218 tty->print_cr("One of variables printed above overflows size_t. Can't proceed.\n");
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
219 return 2;
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
220 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
221 }
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
222
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
223 return wb_stress_virtual_space_resize((size_t) reserved_space_size,
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
224 (size_t) magnitude, (size_t) iterations);
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
225 WB_END
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
226
20357
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
227 WB_ENTRY(jboolean, WB_isObjectInOldGen(JNIEnv* env, jobject o, jobject obj))
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
228 oop p = JNIHandles::resolve(obj);
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
229 #if INCLUDE_ALL_GCS
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
230 if (UseG1GC) {
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
231 G1CollectedHeap* g1 = G1CollectedHeap::heap();
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
232 const HeapRegion* hr = g1->heap_region_containing(p);
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
233 if (hr == NULL) {
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
234 return false;
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
235 }
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
236 return !(hr->is_young());
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
237 } else if (UseParallelGC) {
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
238 ParallelScavengeHeap* psh = ParallelScavengeHeap::heap();
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
239 return !psh->is_in_young(p);
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
240 }
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
241 #endif // INCLUDE_ALL_GCS
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
242 GenCollectedHeap* gch = GenCollectedHeap::heap();
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
243 return !gch->is_in_young(p);
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
244 WB_END
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
245
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
246 WB_ENTRY(jlong, WB_GetObjectSize(JNIEnv* env, jobject o, jobject obj))
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
247 oop p = JNIHandles::resolve(obj);
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
248 return p->size() * HeapWordSize;
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
249 WB_END
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
250
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
251 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
252 WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
253 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
254 oop result = JNIHandles::resolve(obj);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
255 const HeapRegion* hr = g1->heap_region_containing(result);
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
256 return hr->isHumongous();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
257 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
258
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
259 WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
260 G1CollectedHeap* g1 = G1CollectedHeap::heap();
20336
6701abbc4441 8054818: Refactor HeapRegionSeq to manage heap region and auxiliary data
tschatzl
parents: 20278
diff changeset
261 size_t nr = g1->num_free_regions();
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
262 return (jlong)nr;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
263 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
264
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
265 WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
266 G1CollectedHeap* g1 = G1CollectedHeap::heap();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
267 ConcurrentMark* cm = g1->concurrent_mark();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
268 return cm->concurrent_marking_in_progress();
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
269 WB_END
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
270
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
271 WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
272 return (jint)HeapRegion::GrainBytes;
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
273 WB_END
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
274 #endif // INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
275
12118
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
276 #if INCLUDE_NMT
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
277 // 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
278 // NMT picks it up correctly
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
279 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
280 jlong addr = 0;
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
281 addr = (jlong)(uintptr_t)os::malloc(size, mtTest);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
282 return addr;
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
283 WB_END
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
284
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
285 // Alloc memory with pseudo call stack. The test can create psudo malloc
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
286 // allocation site to stress the malloc tracking.
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
287 WB_ENTRY(jlong, WB_NMTMallocWithPseudoStack(JNIEnv* env, jobject o, jlong size, jint pseudo_stack))
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
288 address pc = (address)(size_t)pseudo_stack;
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
289 NativeCallStack stack(&pc, 1);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
290 return (jlong)os::malloc(size, mtTest, stack);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
291 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
292
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
293 // Free the memory allocated by NMTAllocTest
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
294 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
295 os::free((void*)(uintptr_t)mem, mtTest);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
296 WB_END
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
297
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
298 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
299 jlong addr = 0;
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
300
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
301 addr = (jlong)(uintptr_t)os::reserve_memory(size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
302 MemTracker::record_virtual_memory_type((address)addr, mtTest);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
303
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
304 return addr;
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
305 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
306
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
307
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
308 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
309 os::commit_memory((char *)(uintptr_t)addr, size, !ExecMem);
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
310 MemTracker::record_virtual_memory_type((address)(uintptr_t)addr, mtTest);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
311 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
312
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
313 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
314 os::uncommit_memory((char *)(uintptr_t)addr, size);
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
315 WB_END
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
316
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
317 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
318 os::release_memory((char *)(uintptr_t)addr, size);
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
319 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
320
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
321 WB_ENTRY(jboolean, WB_NMTIsDetailSupported(JNIEnv* env))
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
322 return MemTracker::tracking_level() == NMT_detail;
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
323 WB_END
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
324
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
325 WB_ENTRY(void, WB_NMTOverflowHashBucket(JNIEnv* env, jobject o, jlong num))
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
326 address pc = (address)1;
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
327 for (jlong index = 0; index < num; index ++) {
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
328 NativeCallStack stack(&pc, 1);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
329 os::malloc(0, mtTest, stack);
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
330 pc += MallocSiteTable::hash_buckets();
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
331 }
12118
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
332 WB_END
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
333
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
334
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
335 #endif // INCLUDE_NMT
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
336
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
337 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
338 assert(method != NULL, "method should not be null");
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
339 ThreadToNativeFromVM ttn(thread);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
340 return env->FromReflectedMethod(method);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
341 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
342
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
343 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
344 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
345 CodeCache::mark_all_nmethods_for_deoptimization();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
346 VM_Deoptimize op;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
347 VMThread::execute(&op);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
348 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
349
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
350 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
351 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
352 int result = 0;
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
353 CHECK_JNI_EXCEPTION_(env, result);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
354 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
355 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
356 nmethod* code;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
357 if (is_osr) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
358 int bci = InvocationEntryBci;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
359 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
360 code->mark_for_deoptimization();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
361 ++result;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
362 bci = code->osr_entry_bci() + 1;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
363 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
364 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
365 code = mh->code();
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
366 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
367 if (code != NULL) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
368 code->mark_for_deoptimization();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
369 ++result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
370 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
371 result += CodeCache::mark_for_deoptimization(mh());
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
372 if (result > 0) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
373 VM_Deoptimize op;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
374 VMThread::execute(&op);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
375 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
376 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
377 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
378
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
379 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
380 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
381 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
382 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
383 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
384 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
385 if (code == NULL) {
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
386 return JNI_FALSE;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
387 }
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
388 return (code->is_alive() && !code->is_marked_for_deoptimization());
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
389 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
390
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
391 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
392 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
393 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
394 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
395 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
396 if (is_osr) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
397 return CompilationPolicy::can_be_osr_compiled(mh, comp_level);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
398 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
399 return CompilationPolicy::can_be_compiled(mh, comp_level);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
400 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
401 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
402
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
403 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
404 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
405 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
406 MutexLockerEx mu(Compile_lock);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
407 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
408 return mh->queued_for_compilation();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
409 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
410
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
411 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
412 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
413 CHECK_JNI_EXCEPTION_(env, CompLevel_none);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
414 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
415 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
416 return (code != NULL ? code->comp_level() : CompLevel_none);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
417 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
418
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
419 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
420 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
421 CHECK_JNI_EXCEPTION(env);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
422 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
423 if (is_osr) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
424 mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
425 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
426 mh->set_not_compilable(comp_level, true /* report */, "WhiteBox");
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
427 }
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
428 WB_END
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
429
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
430 WB_ENTRY(jint, WB_GetMethodEntryBci(JNIEnv* env, jobject o, jobject method))
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
431 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
432 CHECK_JNI_EXCEPTION_(env, InvocationEntryBci);
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
433 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
434 nmethod* code = mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
435 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
436 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
437
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
438 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
439 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
440 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
441 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
442 bool result = mh->dont_inline();
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
443 mh->set_dont_inline(value == JNI_TRUE);
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
444 return result;
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
445 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
446
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
447 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
448 if (comp_level == CompLevel_any) {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
449 return CompileBroker::queue_size(CompLevel_full_optimization) /* C2 */ +
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
450 CompileBroker::queue_size(CompLevel_full_profile) /* C1 */;
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
451 } else {
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
452 return CompileBroker::queue_size(comp_level);
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
453 }
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
454 WB_END
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
455
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
456 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
457 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
458 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
459 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
460 bool result = mh->force_inline();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
461 mh->set_force_inline(value == JNI_TRUE);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
462 return result;
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
463 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
464
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
465 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
466 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
467 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
468 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
469 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
470 MutexLockerEx mu(Compile_lock);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
471 return (mh->queued_for_compilation() || nm != NULL);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
472 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
473
17867
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
474 class VM_WhiteBoxOperation : public VM_Operation {
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
475 public:
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
476 VM_WhiteBoxOperation() { }
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
477 VMOp_Type type() const { return VMOp_WhiteBoxOperation; }
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
478 bool allow_nested_vm_operations() const { return true; }
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
479 };
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
480
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
481 class AlwaysFalseClosure : public BoolObjectClosure {
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
482 public:
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
483 bool do_object_b(oop p) { return false; }
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
484 };
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
485
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
486 static AlwaysFalseClosure always_false;
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
487
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
488 class VM_WhiteBoxCleanMethodData : public VM_WhiteBoxOperation {
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
489 public:
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
490 VM_WhiteBoxCleanMethodData(MethodData* mdo) : _mdo(mdo) { }
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
491 void doit() {
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
492 _mdo->clean_method_data(&always_false);
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
493 }
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
494 private:
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
495 MethodData* _mdo;
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
496 };
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
497
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
498 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
499 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
17704
56cd09c4a5c9 8028785: [parfait] warnings from b116 for hotspot.src.share.vm.prims: JNI exception pending
ccheung
parents: 13070
diff changeset
500 CHECK_JNI_EXCEPTION(env);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
501 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
502 MutexLockerEx mu(Compile_lock);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
503 MethodData* mdo = mh->method_data();
10107
jiangli
parents: 9085
diff changeset
504 MethodCounters* mcs = mh->method_counters();
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
505
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
506 if (mdo != NULL) {
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
507 mdo->init();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
508 ResourceMark rm;
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
509 int arg_count = mdo->method()->size_of_parameters();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
510 for (int i = 0; i < arg_count; i++) {
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
511 mdo->set_arg_modified(i, 0);
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
512 }
17867
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
513 VM_WhiteBoxCleanMethodData op(mdo);
b127b0d6de7f 8039597: WhiteBox :: clean type profiling data
iignatyev
parents: 17817
diff changeset
514 VMThread::execute(&op);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
515 }
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
516
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
517 mh->clear_not_c1_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
518 mh->clear_not_c2_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
519 mh->clear_not_c2_osr_compilable();
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
520 NOT_PRODUCT(mh->set_compiled_invocation_count(0));
10107
jiangli
parents: 9085
diff changeset
521 if (mcs != NULL) {
jiangli
parents: 9085
diff changeset
522 mcs->backedge_counter()->init();
jiangli
parents: 9085
diff changeset
523 mcs->invocation_counter()->init();
jiangli
parents: 9085
diff changeset
524 mcs->set_interpreter_invocation_count(0);
jiangli
parents: 9085
diff changeset
525 mcs->set_interpreter_throwout_count(0);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
526
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
527 #ifdef TIERED
10107
jiangli
parents: 9085
diff changeset
528 mcs->set_rate(0.0F);
20465
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 20451
diff changeset
529 mh->set_prev_event_count(0);
7301840ea20e 8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
vlivanov
parents: 20451
diff changeset
530 mh->set_prev_time(0);
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
531 #endif
10107
jiangli
parents: 9085
diff changeset
532 }
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
533 WB_END
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
534
20249
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
535 template <typename T>
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
536 static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, bool (*TAt)(const char*, T*)) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
537 if (name == NULL) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
538 return false;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
539 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
540 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
541 const char* flag_name = env->GetStringUTFChars(name, NULL);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
542 bool result = (*TAt)(flag_name, value);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
543 env->ReleaseStringUTFChars(name, flag_name);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
544 return result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
545 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
546
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
547 template <typename T>
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
548 static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, bool (*TAtPut)(const char*, T*, Flag::Flags)) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
549 if (name == NULL) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
550 return false;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
551 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
552 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
553 const char* flag_name = env->GetStringUTFChars(name, NULL);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
554 bool result = (*TAtPut)(flag_name, value, Flag::INTERNAL);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
555 env->ReleaseStringUTFChars(name, flag_name);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
556 return result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
557 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
558
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
559 template <typename T>
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
560 static jobject box(JavaThread* thread, JNIEnv* env, Symbol* name, Symbol* sig, T value) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
561 ResourceMark rm(thread);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
562 jclass clazz = env->FindClass(name->as_C_string());
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
563 CHECK_JNI_EXCEPTION_(env, NULL);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
564 jmethodID methodID = env->GetStaticMethodID(clazz,
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
565 vmSymbols::valueOf_name()->as_C_string(),
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
566 sig->as_C_string());
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
567 CHECK_JNI_EXCEPTION_(env, NULL);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
568 jobject result = env->CallStaticObjectMethod(clazz, methodID, value);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
569 CHECK_JNI_EXCEPTION_(env, NULL);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
570 return result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
571 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
572
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
573 static jobject booleanBox(JavaThread* thread, JNIEnv* env, jboolean value) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
574 return box(thread, env, vmSymbols::java_lang_Boolean(), vmSymbols::Boolean_valueOf_signature(), value);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
575 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
576 static jobject integerBox(JavaThread* thread, JNIEnv* env, jint value) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
577 return box(thread, env, vmSymbols::java_lang_Integer(), vmSymbols::Integer_valueOf_signature(), value);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
578 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
579 static jobject longBox(JavaThread* thread, JNIEnv* env, jlong value) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
580 return box(thread, env, vmSymbols::java_lang_Long(), vmSymbols::Long_valueOf_signature(), value);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
581 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
582 /* static jobject floatBox(JavaThread* thread, JNIEnv* env, jfloat value) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
583 return box(thread, env, vmSymbols::java_lang_Float(), vmSymbols::Float_valueOf_signature(), value);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
584 }*/
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
585 static jobject doubleBox(JavaThread* thread, JNIEnv* env, jdouble value) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
586 return box(thread, env, vmSymbols::java_lang_Double(), vmSymbols::Double_valueOf_signature(), value);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
587 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
588
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
589 WB_ENTRY(jobject, WB_GetBooleanVMFlag(JNIEnv* env, jobject o, jstring name))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
590 bool result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
591 if (GetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAt)) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
592 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
593 return booleanBox(thread, env, result);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
594 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
595 return NULL;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
596 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
597
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
598 WB_ENTRY(jobject, WB_GetIntxVMFlag(JNIEnv* env, jobject o, jstring name))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
599 intx result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
600 if (GetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAt)) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
601 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
602 return longBox(thread, env, result);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
603 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
604 return NULL;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
605 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
606
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
607 WB_ENTRY(jobject, WB_GetUintxVMFlag(JNIEnv* env, jobject o, jstring name))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
608 uintx result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
609 if (GetVMFlag <uintx> (thread, env, name, &result, &CommandLineFlags::uintxAt)) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
610 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
611 return longBox(thread, env, result);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
612 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
613 return NULL;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
614 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
615
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
616 WB_ENTRY(jobject, WB_GetUint64VMFlag(JNIEnv* env, jobject o, jstring name))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
617 uint64_t result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
618 if (GetVMFlag <uint64_t> (thread, env, name, &result, &CommandLineFlags::uint64_tAt)) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
619 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
620 return longBox(thread, env, result);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
621 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
622 return NULL;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
623 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
624
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
625 WB_ENTRY(jobject, WB_GetDoubleVMFlag(JNIEnv* env, jobject o, jstring name))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
626 double result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
627 if (GetVMFlag <double> (thread, env, name, &result, &CommandLineFlags::doubleAt)) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
628 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
629 return doubleBox(thread, env, result);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
630 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
631 return NULL;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
632 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
633
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
634 WB_ENTRY(jstring, WB_GetStringVMFlag(JNIEnv* env, jobject o, jstring name))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
635 ccstr ccstrResult;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
636 if (GetVMFlag <ccstr> (thread, env, name, &ccstrResult, &CommandLineFlags::ccstrAt)) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
637 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
638 jstring result = env->NewStringUTF(ccstrResult);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
639 CHECK_JNI_EXCEPTION_(env, NULL);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
640 return result;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
641 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
642 return NULL;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
643 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
644
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
645 WB_ENTRY(void, WB_SetBooleanVMFlag(JNIEnv* env, jobject o, jstring name, jboolean value))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
646 bool result = value == JNI_TRUE ? true : false;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
647 SetVMFlag <bool> (thread, env, name, &result, &CommandLineFlags::boolAtPut);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
648 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
649
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
650 WB_ENTRY(void, WB_SetIntxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
651 intx result = value;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
652 SetVMFlag <intx> (thread, env, name, &result, &CommandLineFlags::intxAtPut);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
653 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
654
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
655 WB_ENTRY(void, WB_SetUintxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
656 uintx result = value;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
657 SetVMFlag <uintx> (thread, env, name, &result, &CommandLineFlags::uintxAtPut);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
658 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
659
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
660 WB_ENTRY(void, WB_SetUint64VMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
661 uint64_t result = value;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
662 SetVMFlag <uint64_t> (thread, env, name, &result, &CommandLineFlags::uint64_tAtPut);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
663 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
664
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
665 WB_ENTRY(void, WB_SetDoubleVMFlag(JNIEnv* env, jobject o, jstring name, jdouble value))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
666 double result = value;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
667 SetVMFlag <double> (thread, env, name, &result, &CommandLineFlags::doubleAtPut);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
668 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
669
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
670 WB_ENTRY(void, WB_SetStringVMFlag(JNIEnv* env, jobject o, jstring name, jstring value))
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
671 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
672 const char* ccstrValue = (value == NULL) ? NULL : env->GetStringUTFChars(value, NULL);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
673 ccstr ccstrResult = ccstrValue;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
674 bool needFree;
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
675 {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
676 ThreadInVMfromNative ttvfn(thread); // back to VM
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
677 needFree = SetVMFlag <ccstr> (thread, env, name, &ccstrResult, &CommandLineFlags::ccstrAtPut);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
678 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
679 if (value != NULL) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
680 env->ReleaseStringUTFChars(value, ccstrValue);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
681 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
682 if (needFree) {
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
683 FREE_C_HEAP_ARRAY(char, ccstrResult, mtInternal);
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
684 }
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
685 WB_END
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
686
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
687
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
688 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString))
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
689 ResourceMark rm(THREAD);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
690 int len;
10155
f258c5828eb8 8011773: Some tests on Interned String crashed JVM with OOM
hseigel
parents: 10116
diff changeset
691 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
692 return (StringTable::lookup(name, len) != NULL);
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
693 WB_END
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
694
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
695 WB_ENTRY(void, WB_FullGC(JNIEnv* env, jobject o))
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
696 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(true);
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
697 Universe::heap()->collect(GCCause::_last_ditch_collection);
20451
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
698 #if INCLUDE_ALL_GCS
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
699 if (UseG1GC) {
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
700 // Needs to be cleared explicitly for G1
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
701 Universe::heap()->collector_policy()->set_should_clear_all_soft_refs(false);
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
702 }
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
703 #endif // INCLUDE_ALL_GCS
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
704 WB_END
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
705
20357
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
706 WB_ENTRY(void, WB_YoungGC(JNIEnv* env, jobject o))
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
707 Universe::heap()->collect(GCCause::_wb_young_gc);
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
708 WB_END
10157
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
709
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
710 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
711 // 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
712 // (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
713 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
714 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
715
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
716 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
717 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
718 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
719 }
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
720
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
721 c = *p;
10157
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
722 WB_END
f32b6c267d2e 8012015: Use PROT_NONE when reserving memory
mikael
parents: 10155
diff changeset
723
17778
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
724 WB_ENTRY(jstring, WB_GetCPUFeatures(JNIEnv* env, jobject o))
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
725 const char* cpu_features = VM_Version::cpu_features();
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
726 ThreadToNativeFromVM ttn(thread);
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
727 jstring features_string = env->NewStringUTF(cpu_features);
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
728
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
729 CHECK_JNI_EXCEPTION_(env, NULL);
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
730
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
731 return features_string;
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
732 WB_END
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
733
17817
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
734
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
735 WB_ENTRY(jobjectArray, WB_GetNMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
736 ResourceMark rm(THREAD);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
737 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
738 CHECK_JNI_EXCEPTION_(env, NULL);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
739 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
740 nmethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
741 jobjectArray result = NULL;
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
742 if (code == NULL) {
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
743 return result;
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
744 }
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
745 int insts_size = code->insts_size();
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
746
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
747 ThreadToNativeFromVM ttn(thread);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
748 jclass clazz = env->FindClass(vmSymbols::java_lang_Object()->as_C_string());
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
749 CHECK_JNI_EXCEPTION_(env, NULL);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
750 result = env->NewObjectArray(2, clazz, NULL);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
751 if (result == NULL) {
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
752 return result;
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
753 }
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
754
20249
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
755 jobject obj = integerBox(thread, env, code->comp_level());
17817
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
756 CHECK_JNI_EXCEPTION_(env, NULL);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
757 env->SetObjectArrayElement(result, 0, obj);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
758
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
759 jbyteArray insts = env->NewByteArray(insts_size);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
760 CHECK_JNI_EXCEPTION_(env, NULL);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
761 env->SetByteArrayRegion(insts, 0, insts_size, (jbyte*) code->insts_begin());
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
762 env->SetObjectArrayElement(result, 1, insts);
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
763
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
764 return result;
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
765 WB_END
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
766
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
767
20278
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
768 int WhiteBox::array_bytes_to_length(size_t bytes) {
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
769 return Array<u1>::bytes_to_length(bytes);
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
770 }
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
771
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
772 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size))
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
773 if (size < 0) {
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
774 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
775 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size));
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
776 }
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
777
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
778 oop class_loader_oop = JNIHandles::resolve(class_loader);
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
779 ClassLoaderData* cld = class_loader_oop != NULL
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
780 ? java_lang_ClassLoader::loader_data(class_loader_oop)
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
781 : ClassLoaderData::the_null_class_loader_data();
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
782
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
783 void* metadata = MetadataFactory::new_writeable_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread);
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
784
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
785 return (jlong)(uintptr_t)metadata;
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
786 WB_END
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
787
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
788 WB_ENTRY(void, WB_FreeMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong addr, jlong size))
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
789 oop class_loader_oop = JNIHandles::resolve(class_loader);
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
790 ClassLoaderData* cld = class_loader_oop != NULL
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
791 ? java_lang_ClassLoader::loader_data(class_loader_oop)
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
792 : ClassLoaderData::the_null_class_loader_data();
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
793
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
794 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr);
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
795 WB_END
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
796
20540
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
797 WB_ENTRY(jlong, WB_IncMetaspaceCapacityUntilGC(JNIEnv* env, jobject wb, jlong inc))
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
798 if (inc < 0) {
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
799 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
800 err_msg("WB_IncMetaspaceCapacityUntilGC: inc is negative: " JLONG_FORMAT, inc));
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
801 }
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
802
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
803 jlong max_size_t = (jlong) ((size_t) -1);
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
804 if (inc > max_size_t) {
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
805 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
806 err_msg("WB_IncMetaspaceCapacityUntilGC: inc does not fit in size_t: " JLONG_FORMAT, inc));
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
807 }
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
808
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
809 size_t new_cap_until_GC = 0;
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
810 size_t aligned_inc = align_size_down((size_t) inc, Metaspace::commit_alignment());
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
811 bool success = MetaspaceGC::inc_capacity_until_GC(aligned_inc, &new_cap_until_GC);
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
812 if (!success) {
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
813 THROW_MSG_0(vmSymbols::java_lang_IllegalStateException(),
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
814 "WB_IncMetaspaceCapacityUntilGC: could not increase capacity until GC "
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
815 "due to contention with another thread");
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
816 }
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
817 return (jlong) new_cap_until_GC;
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
818 WB_END
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
819
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
820 WB_ENTRY(jlong, WB_MetaspaceCapacityUntilGC(JNIEnv* env, jobject wb))
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
821 return (jlong) MetaspaceGC::capacity_until_GC();
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
822 WB_END
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
823
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
824 //Some convenience methods to deal with objects from java
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
825 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
826 Symbol* signature_symbol) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
827 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
828 Thread* THREAD = Thread::current();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
829
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
830 //Get the class of our object
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
831 Klass* arg_klass = object->klass();
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
832 //Turn it into an instance-klass
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
833 InstanceKlass* ik = InstanceKlass::cast(arg_klass);
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
834
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
835 //Create symbols to look for in the class
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
836 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
837 THREAD);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
838
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
839 //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
840 fieldDescriptor fd;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
841
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6202
diff changeset
842 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
843 if (res == NULL) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
844 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
845 name_symbol->as_C_string());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
846 fatal("Invalid layout of preloaded class");
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
847 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
848
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
849 //fetch the field at the offset we've found
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
850 int dest_offset = fd.offset();
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
851
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
852 return dest_offset;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
853 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
854
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
855
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
856 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
857 int offset = offset_for_field(field_name, object,
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
858 vmSymbols::string_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
859 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
860 if (string == NULL) {
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
861 return NULL;
5a1f452f8f90 7178703: Fix handling of quoted arguments and better error messages in dcmd
sla
parents: 5978
diff changeset
862 }
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
863 const char* ret = java_lang_String::as_utf8_string(string);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
864 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
865 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
866
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
867 bool WhiteBox::lookup_bool(const char* field_name, oop object) {
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
868 int offset =
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
869 offset_for_field(field_name, object, vmSymbols::bool_signature());
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
870 bool ret = (object->bool_field(offset) == JNI_TRUE);
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
871 return ret;
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
872 }
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
873
20451
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
874 void WhiteBox::register_methods(JNIEnv* env, jclass wbclass, JavaThread* thread, JNINativeMethod* method_array, int method_count) {
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
875 ResourceMark rm;
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
876 ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
877
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
878 // one by one registration natives for exception catching
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
879 jclass no_such_method_error_klass = env->FindClass(vmSymbols::java_lang_NoSuchMethodError()->as_C_string());
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
880 CHECK_JNI_EXCEPTION(env);
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
881 for (int i = 0, n = method_count; i < n; ++i) {
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
882 // Skip dummy entries
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
883 if (method_array[i].fnPtr == NULL) continue;
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
884 if (env->RegisterNatives(wbclass, &method_array[i], 1) != 0) {
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
885 jthrowable throwable_obj = env->ExceptionOccurred();
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
886 if (throwable_obj != NULL) {
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
887 env->ExceptionClear();
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
888 if (env->IsInstanceOf(throwable_obj, no_such_method_error_klass)) {
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
889 // NoSuchMethodError is thrown when a method can't be found or a method is not native.
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
890 // Ignoring the exception since it is not preventing use of other WhiteBox methods.
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
891 tty->print_cr("Warning: 'NoSuchMethodError' on register of sun.hotspot.WhiteBox::%s%s",
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
892 method_array[i].name, method_array[i].signature);
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
893 }
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
894 } else {
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
895 // Registration failed unexpectedly.
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
896 tty->print_cr("Warning: unexpected error on register of sun.hotspot.WhiteBox::%s%s. All methods will be unregistered",
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
897 method_array[i].name, method_array[i].signature);
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
898 env->UnregisterNatives(wbclass);
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
899 break;
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
900 }
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
901 }
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
902 }
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
903 }
5978
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
904
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
905 #define CC (char*)
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
906
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
907 static JNINativeMethod methods[] = {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
908 {CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
20357
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
909 {CC"getObjectSize", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectSize },
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
910 {CC"isObjectInOldGen", CC"(Ljava/lang/Object;)Z", (void*)&WB_isObjectInOldGen },
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
911 {CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
912 {CC"isClassAlive0", CC"(Ljava/lang/String;)Z", (void*)&WB_IsClassAlive },
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
913 {CC"parseCommandLine",
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
914 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
915 (void*) &WB_ParseCommandLine
51612f0c0a79 7148488: Whitebox tests for the Diagnostic Framework Parser
nloodin
parents: 5915
diff changeset
916 },
12233
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
917 {CC"getCompressedOopsMaxHeapSize", CC"()J",
40136aa2cdb1 8010722: assert: failed: heap size is too big for compressed oops
tschatzl
parents: 12118
diff changeset
918 (void*)&WB_GetCompressedOopsMaxHeapSize},
10241
d17700c82d7d 8006088: Incompatible heap size flags accepted by VM
tschatzl
parents: 10208
diff changeset
919 {CC"printHeapSizes", CC"()V", (void*)&WB_PrintHeapSizes },
13053
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
920 {CC"runMemoryUnitTests", CC"()V", (void*)&WB_RunMemoryUnitTests},
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
921 {CC"readFromNoaccessArea",CC"()V", (void*)&WB_ReadFromNoaccessArea},
9d8b29a0548c 8027237: New tests on ReservedSpace/VirtualSpace classes
mgerdin
parents: 12233
diff changeset
922 {CC"stressVirtualSpaceResize",CC"(JJJ)I", (void*)&WB_StressVirtualSpaceResize},
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
923 #if INCLUDE_ALL_GCS
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
924 {CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
925 {CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
926 {CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
927 {CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6725
diff changeset
928 #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
929 #if INCLUDE_NMT
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
930 {CC"NMTMalloc", CC"(J)J", (void*)&WB_NMTMalloc },
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
931 {CC"NMTMallocWithPseudoStack", CC"(JI)J", (void*)&WB_NMTMallocWithPseudoStack},
9056
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
932 {CC"NMTFree", CC"(J)V", (void*)&WB_NMTFree },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
933 {CC"NMTReserveMemory", CC"(J)J", (void*)&WB_NMTReserveMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
934 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
935 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
3b890cd4da64 8009125: Add NMT tests for Virtual Memory operations
ctornqvi
parents: 8850
diff changeset
936 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
20360
833b0f92429a 8046598: Scalable Native memory tracking development
zgu
parents: 20357
diff changeset
937 {CC"NMTOverflowHashBucket", CC"(J)V", (void*)&WB_NMTOverflowHashBucket},
12118
5fd8e2fbafd4 8020829: JT_HS: 2 runtime NMT tests fail on platforms if NMT detail is not supported
cjplummer
parents: 12073
diff changeset
938 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported},
7971
4102b59539ce 8005012: Add WB APIs to better support NMT testing
ctornqvi
parents: 6725
diff changeset
939 #endif // INCLUDE_NMT
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
940 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
941 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
942 (void*)&WB_DeoptimizeMethod },
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
943 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
944 (void*)&WB_IsMethodCompiled },
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
945 {CC"isMethodCompilable", CC"(Ljava/lang/reflect/Executable;IZ)Z",
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
946 (void*)&WB_IsMethodCompilable},
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
947 {CC"isMethodQueuedForCompilation",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
948 CC"(Ljava/lang/reflect/Executable;)Z", (void*)&WB_IsMethodQueuedForCompilation},
8051
12e01444ca2d 8006683: Add WhiteBox API to testing of compiler
iignatyev
parents: 8003
diff changeset
949 {CC"makeMethodNotCompilable",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
950 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
951 {CC"testSetDontInlineMethod",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
952 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
953 {CC"getMethodCompilationLevel",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
954 CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_GetMethodCompilationLevel},
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
955 {CC"getMethodEntryBci",
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
956 CC"(Ljava/lang/reflect/Executable;)I", (void*)&WB_GetMethodEntryBci},
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
957 {CC"getCompileQueueSize",
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
958 CC"(I)I", (void*)&WB_GetCompileQueueSize},
9080
b84fd7d73702 8007288: Additional WB API for compiler's testing
iignatyev
parents: 8850
diff changeset
959 {CC"testSetForceInlineMethod",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
960 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
961 {CC"enqueueMethodForCompilation",
12073
f99558245e5c 8022832: Add WB APIs for OSR compilation
iignatyev
parents: 10969
diff changeset
962 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
963 {CC"clearMethodState",
10113
4b2eebe03f93 8011971: WB API doesn't accept j.l.reflect.Constructor
iignatyev
parents: 9085
diff changeset
964 CC"(Ljava/lang/reflect/Executable;)V", (void*)&WB_ClearMethodState},
20249
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
965 {CC"setBooleanVMFlag", CC"(Ljava/lang/String;Z)V",(void*)&WB_SetBooleanVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
966 {CC"setIntxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetIntxVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
967 {CC"setUintxVMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUintxVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
968 {CC"setUint64VMFlag", CC"(Ljava/lang/String;J)V",(void*)&WB_SetUint64VMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
969 {CC"setDoubleVMFlag", CC"(Ljava/lang/String;D)V",(void*)&WB_SetDoubleVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
970 {CC"setStringVMFlag", CC"(Ljava/lang/String;Ljava/lang/String;)V",
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
971 (void*)&WB_SetStringVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
972 {CC"getBooleanVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Boolean;",
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
973 (void*)&WB_GetBooleanVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
974 {CC"getIntxVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
975 (void*)&WB_GetIntxVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
976 {CC"getUintxVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
977 (void*)&WB_GetUintxVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
978 {CC"getUint64VMFlag", CC"(Ljava/lang/String;)Ljava/lang/Long;",
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
979 (void*)&WB_GetUint64VMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
980 {CC"getDoubleVMFlag", CC"(Ljava/lang/String;)Ljava/lang/Double;",
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
981 (void*)&WB_GetDoubleVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
982 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;",
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
983 (void*)&WB_GetStringVMFlag},
0c48231c5c84 8038756: new WB API :: get/setVMFlag
iignatyev
parents: 17937
diff changeset
984 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
8850
ede380e13960 8009763: Add WB test for String.intern()
mgerdin
parents: 8051
diff changeset
985 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
20357
4bfc44ba0d19 8055098: WB API should be extended to provide information about size and age of object.
tschatzl
parents: 20336
diff changeset
986 {CC"youngGC", CC"()V", (void*)&WB_YoungGC },
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
987 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
20278
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
988 {CC"allocateMetaspace",
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
989 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace },
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
990 {CC"freeMetaspace",
2c6ef90f030a 8049421: G1 Class Unloading after completing a concurrent mark cycle
stefank
parents: 20249
diff changeset
991 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace },
20540
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
992 {CC"incMetaspaceCapacityUntilGC", CC"(J)J", (void*)&WB_IncMetaspaceCapacityUntilGC },
b509b7ff561c 8049599: MetaspaceGC::_capacity_until_GC can overflow
ehelin
parents: 20465
diff changeset
993 {CC"metaspaceCapacityUntilGC", CC"()J", (void*)&WB_MetaspaceCapacityUntilGC },
17778
a48e16541e6b 8035857: Add tests to verify correctness of operations with BMI1 and LZCNT instructions
iignatyev
parents: 17704
diff changeset
994 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures },
17817
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
995 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
4abb719c5620 8038240: new WB API to get nmethod
iignatyev
parents: 17778
diff changeset
996 (void*)&WB_GetNMethod },
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
997 };
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
998
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
999 #undef CC
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1000
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1001 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1002 {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1003 if (WhiteBoxAPI) {
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1004 // Make sure that wbclass is loaded by the null classloader
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1005 instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1006 Handle loader(ikh->class_loader());
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1007 if (loader.is_null()) {
20451
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
1008 WhiteBox::register_methods(env, wbclass, thread, methods, sizeof(methods) / sizeof(methods[0]));
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
1009 WhiteBox::register_extended(env, wbclass, thread);
e2452c3ff7fb 8057752: WhiteBox extension support for testing
sjohanss
parents: 20360
diff changeset
1010 WhiteBox::set_used();
5915
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1011 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1012 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1013 }
2d503de963b3 7148152: Add whitebox testing API to HotSpot
mgerdin
parents:
diff changeset
1014 JVM_END