--- a/src/hotspot/share/prims/whitebox.cpp Thu Oct 17 20:27:44 2019 +0100
+++ b/src/hotspot/share/prims/whitebox.cpp Thu Oct 17 20:53:35 2019 +0100
@@ -32,6 +32,7 @@
#include "classfile/stringTable.hpp"
#include "classfile/symbolTable.hpp"
#include "code/codeCache.hpp"
+#include "compiler/compilationPolicy.hpp"
#include "compiler/methodMatcher.hpp"
#include "compiler/directivesParser.hpp"
#include "gc/shared/gcConfig.hpp"
@@ -58,7 +59,6 @@
#include "prims/wbtestmethods/parserTests.hpp"
#include "prims/whitebox.inline.hpp"
#include "runtime/arguments.hpp"
-#include "runtime/compilationPolicy.hpp"
#include "runtime/deoptimization.hpp"
#include "runtime/fieldDescriptor.inline.hpp"
#include "runtime/flags/jvmFlag.hpp"
@@ -242,7 +242,6 @@
void TestReservedSpace_test();
void TestReserveMemorySpecial_test();
void TestVirtualSpace_test();
-void TestMetaspaceUtils_test();
#endif
WB_ENTRY(void, WB_RunMemoryUnitTests(JNIEnv* env, jobject o))
@@ -250,7 +249,6 @@
TestReservedSpace_test();
TestReserveMemorySpecial_test();
TestVirtualSpace_test();
- TestMetaspaceUtils_test();
#endif
WB_END
@@ -518,7 +516,7 @@
uint end_region = HeterogeneousHeapRegionManager::manager()->end_index_of_dram();
return (jlong)(g1h->base() + (end_region + 1) * HeapRegion::GrainBytes - 1);
} else {
- return (jlong)g1h->base() + G1Arguments::heap_reserved_size_bytes();
+ return (jlong)g1h->base() + G1Arguments::heap_max_size_bytes();
}
}
#endif // INCLUDE_G1GC
@@ -919,9 +917,9 @@
CHECK_JNI_EXCEPTION(env);
methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
if (is_osr) {
- mh->set_not_osr_compilable(comp_level, true /* report */, "WhiteBox");
+ mh->set_not_osr_compilable("WhiteBox", comp_level);
} else {
- mh->set_not_compilable(comp_level, true /* report */, "WhiteBox");
+ mh->set_not_compilable("WhiteBox", comp_level);
}
WB_END
@@ -1136,27 +1134,29 @@
WB_END
template <typename T>
-static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAt)(const char*, T*, bool, bool)) {
+static bool GetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAt)(const JVMFlag*, T*)) {
if (name == NULL) {
return false;
}
ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
const char* flag_name = env->GetStringUTFChars(name, NULL);
CHECK_JNI_EXCEPTION_(env, false);
- JVMFlag::Error result = (*TAt)(flag_name, value, true, true);
+ const JVMFlag* flag = JVMFlag::find_declared_flag(flag_name);
+ JVMFlag::Error result = (*TAt)(flag, value);
env->ReleaseStringUTFChars(name, flag_name);
return (result == JVMFlag::SUCCESS);
}
template <typename T>
-static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAtPut)(const char*, T*, JVMFlag::Flags)) {
+static bool SetVMFlag(JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAtPut)(JVMFlag* flag, T*, JVMFlag::Flags)) {
if (name == NULL) {
return false;
}
ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
const char* flag_name = env->GetStringUTFChars(name, NULL);
CHECK_JNI_EXCEPTION_(env, false);
- JVMFlag::Error result = (*TAtPut)(flag_name, value, JVMFlag::INTERNAL);
+ JVMFlag* flag = JVMFlag::find_flag(flag_name);
+ JVMFlag::Error result = (*TAtPut)(flag, value, JVMFlag::INTERNAL);
env->ReleaseStringUTFChars(name, flag_name);
return (result == JVMFlag::SUCCESS);
}
@@ -1191,22 +1191,22 @@
return box(thread, env, vmSymbols::java_lang_Double(), vmSymbols::Double_valueOf_signature(), value);
}
-static JVMFlag* getVMFlag(JavaThread* thread, JNIEnv* env, jstring name) {
+static const JVMFlag* getVMFlag(JavaThread* thread, JNIEnv* env, jstring name) {
ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
const char* flag_name = env->GetStringUTFChars(name, NULL);
CHECK_JNI_EXCEPTION_(env, NULL);
- JVMFlag* result = JVMFlag::find_flag(flag_name, strlen(flag_name), true, true);
+ const JVMFlag* result = JVMFlag::find_declared_flag(flag_name);
env->ReleaseStringUTFChars(name, flag_name);
return result;
}
WB_ENTRY(jboolean, WB_IsConstantVMFlag(JNIEnv* env, jobject o, jstring name))
- JVMFlag* flag = getVMFlag(thread, env, name);
+ const JVMFlag* flag = getVMFlag(thread, env, name);
return (flag != NULL) && flag->is_constant_in_binary();
WB_END
WB_ENTRY(jboolean, WB_IsLockedVMFlag(JNIEnv* env, jobject o, jstring name))
- JVMFlag* flag = getVMFlag(thread, env, name);
+ const JVMFlag* flag = getVMFlag(thread, env, name);
return (flag != NULL) && !(flag->is_unlocked() || flag->is_unlocker());
WB_END
@@ -1735,19 +1735,33 @@
WB_END
WB_ENTRY(void, WB_AssertMatchingSafepointCalls(JNIEnv* env, jobject o, jboolean mutexSafepointValue, jboolean attemptedNoSafepointValue))
- Monitor::SafepointCheckRequired sfpt_check_required = mutexSafepointValue ?
- Monitor::_safepoint_check_always :
- Monitor::_safepoint_check_never;
- Monitor::SafepointCheckFlag sfpt_check_attempted = attemptedNoSafepointValue ?
- Monitor::_no_safepoint_check_flag :
- Monitor::_safepoint_check_flag;
+ Mutex::SafepointCheckRequired sfpt_check_required = mutexSafepointValue ?
+ Mutex::_safepoint_check_always :
+ Mutex::_safepoint_check_never;
+ Mutex::SafepointCheckFlag sfpt_check_attempted = attemptedNoSafepointValue ?
+ Mutex::_no_safepoint_check_flag :
+ Mutex::_safepoint_check_flag;
MutexLocker ml(new Mutex(Mutex::leaf, "SFPT_Test_lock", true, sfpt_check_required),
sfpt_check_attempted);
WB_END
+WB_ENTRY(void, WB_AssertSpecialLock(JNIEnv* env, jobject o, jboolean allowVMBlock, jboolean safepointCheck))
+ // Create a special lock violating condition in value
+ Mutex::SafepointCheckRequired sfpt_check_required = safepointCheck ?
+ Mutex::_safepoint_check_always :
+ Mutex::_safepoint_check_never;
+ Mutex::SafepointCheckFlag safepoint_check = safepointCheck ?
+ Monitor::_safepoint_check_flag :
+ Monitor::_no_safepoint_check_flag;
+
+ MutexLocker ml(new Mutex(Mutex::special, "SpecialTest_lock", allowVMBlock, sfpt_check_required), safepoint_check);
+ // If the lock above succeeds, try to safepoint to test the NSV implied with this special lock.
+ ThreadBlockInVM tbivm(JavaThread::current());
+WB_END
+
WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
oop obj_oop = JNIHandles::resolve(obj);
- return (jboolean) obj_oop->mark()->has_monitor();
+ return (jboolean) obj_oop->mark().has_monitor();
WB_END
WB_ENTRY(void, WB_ForceSafepoint(JNIEnv* env, jobject wb))
@@ -2322,6 +2336,7 @@
{CC"AddModuleExportsToAll", CC"(Ljava/lang/Object;Ljava/lang/String;)V",
(void*)&WB_AddModuleExportsToAll },
{CC"assertMatchingSafepointCalls", CC"(ZZ)V", (void*)&WB_AssertMatchingSafepointCalls },
+ {CC"assertSpecialLock", CC"(ZZ)V", (void*)&WB_AssertSpecialLock },
{CC"isMonitorInflated0", CC"(Ljava/lang/Object;)Z", (void*)&WB_IsMonitorInflated },
{CC"forceSafepoint", CC"()V", (void*)&WB_ForceSafepoint },
{CC"getConstantPool0", CC"(Ljava/lang/Class;)J", (void*)&WB_GetConstantPool },