diff -r 13588c901957 -r 9cf78a70fa4f src/hotspot/share/prims/whitebox.cpp --- 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 -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 -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 },