changeset 24229:190f5f33b7d3

hosted use of JVMCI can crash VM under -Xint (JDK-8187315)
author Doug Simon <doug.simon@oracle.com>
date Thu, 07 Sep 2017 15:17:51 +0200
parents 5069d3bf9011
children b9b116e02a3f
files src/share/vm/jvmci/jvmciCompiler.hpp src/share/vm/jvmci/jvmciCompilerToVM.cpp src/share/vm/jvmci/jvmciRuntime.cpp src/share/vm/prims/jni.cpp
diffstat 4 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/jvmci/jvmciCompiler.hpp	Tue Aug 29 14:14:13 2017 +0200
+++ b/src/share/vm/jvmci/jvmciCompiler.hpp	Thu Sep 07 15:17:51 2017 +0200
@@ -49,10 +49,13 @@
 public:
   JVMCICompiler();
 
-  static JVMCICompiler* instance(TRAPS) {
+  static JVMCICompiler* instance(bool require_non_null, TRAPS) {
     if (!EnableJVMCI) {
       THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), "JVMCI is not enabled")
     }
+    if (_instance == NULL && require_non_null) {
+      THROW_MSG_NULL(vmSymbols::java_lang_InternalError(), "The JVMCI compiler instance has not been created");
+    }
     return _instance;
   }
 
--- a/src/share/vm/jvmci/jvmciCompilerToVM.cpp	Tue Aug 29 14:14:13 2017 +0200
+++ b/src/share/vm/jvmci/jvmciCompilerToVM.cpp	Thu Sep 07 15:17:51 2017 +0200
@@ -1001,7 +1001,7 @@
   Handle installed_code_handle = JNIHandles::resolve(installed_code);
   Handle speculation_log_handle = JNIHandles::resolve(speculation_log);
 
-  JVMCICompiler* compiler = JVMCICompiler::instance(CHECK_(JNI_ERR));
+  JVMCICompiler* compiler = JVMCICompiler::instance(true, CHECK_(JNI_ERR));
 
   TraceTime install_time("installCode", JVMCICompiler::codeInstallTimer());
   CodeInstaller installer;
@@ -1053,7 +1053,7 @@
 C2V_END
 
 C2V_VMENTRY(void, resetCompilationStatistics, (JNIEnv *jniEnv, jobject))
-  JVMCICompiler* compiler = JVMCICompiler::instance(CHECK);
+  JVMCICompiler* compiler = JVMCICompiler::instance(true, CHECK);
   CompilerStatistics* stats = compiler->stats();
   stats->_standard.reset();
   stats->_osr.reset();
--- a/src/share/vm/jvmci/jvmciRuntime.cpp	Tue Aug 29 14:14:13 2017 +0200
+++ b/src/share/vm/jvmci/jvmciRuntime.cpp	Thu Sep 07 15:17:51 2017 +0200
@@ -870,7 +870,7 @@
 }
 
 CompLevel JVMCIRuntime::adjust_comp_level_inner(methodHandle method, bool is_osr, CompLevel level, JavaThread* thread) {
-  JVMCICompiler* compiler = JVMCICompiler::instance(thread);
+  JVMCICompiler* compiler = JVMCICompiler::instance(false, thread);
   if (compiler != NULL && compiler->is_bootstrapping()) {
     return level;
   }
--- a/src/share/vm/prims/jni.cpp	Tue Aug 29 14:14:13 2017 +0200
+++ b/src/share/vm/prims/jni.cpp	Thu Sep 07 15:17:51 2017 +0200
@@ -5237,7 +5237,7 @@
       // JVMCI is initialized on a CompilerThread
       if (BootstrapJVMCI) {
         JavaThread* THREAD = thread;
-        JVMCICompiler* compiler = JVMCICompiler::instance(CATCH);
+        JVMCICompiler* compiler = JVMCICompiler::instance(true, CATCH);
         compiler->bootstrap(THREAD);
         if (HAS_PENDING_EXCEPTION) {
           HandleMark hm;