diff src/share/vm/jvmci/jvmciCompiler.cpp @ 22454:76af33d4d504

Make jvmci redefinition safe
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Fri, 21 Aug 2015 11:57:29 -0700
parents 7202e96981c6
children d9f5c93a83d3
line wrap: on
line diff
--- a/src/share/vm/jvmci/jvmciCompiler.cpp	Fri Aug 21 16:35:29 2015 +0200
+++ b/src/share/vm/jvmci/jvmciCompiler.cpp	Fri Aug 21 11:57:29 2015 -0700
@@ -24,6 +24,7 @@
 #include "precompiled.hpp"
 #include "memory/oopFactory.hpp"
 #include "runtime/javaCalls.hpp"
+#include "jvmci/jvmciJavaAccess.hpp"
 #include "jvmci/jvmciCompiler.hpp"
 #include "jvmci/jvmciEnv.hpp"
 #include "jvmci/jvmciRuntime.hpp"
@@ -123,17 +124,26 @@
   }
 
   JVMCIRuntime::ensure_jvmci_class_loader_is_initialized();
+  jvmci_compute_offsets();
   HandleMark hm;
   ResourceMark rm;
+  Handle receiver = JVMCIRuntime::get_HotSpotJVMCIRuntime();
+
+  JavaValue method_result(T_OBJECT);
+  {
+    JavaCallArguments args;
+    args.push_long((jlong) (address) method());
+    JavaCalls::call_static(&method_result, SystemDictionary::HotSpotResolvedJavaMethodImpl_klass(), vmSymbols::fromMetaspace_name(), vmSymbols::method_fromMetaspace_signature(), &args, CHECK_ABORT);
+  }
+
   JavaValue result(T_VOID);
   JavaCallArguments args;
-  Handle receiver = JVMCIRuntime::get_HotSpotJVMCIRuntime();
   args.push_oop(receiver);
-  args.push_long((jlong) (address) method());
+  args.push_oop((oop)method_result.get_jobject());
   args.push_int(entry_bci);
   args.push_long((jlong) (address) env);
   args.push_int(env->task()->compile_id());
-  JavaCalls::call_special(&result, receiver->klass(), vmSymbols::compileMetaspaceMethod_name(), vmSymbols::compileMetaspaceMethod_signature(), &args, CHECK_ABORT);
+  JavaCalls::call_special(&result, receiver->klass(), vmSymbols::compileMethod_name(), vmSymbols::compileMethod_signature(), &args, CHECK_ABORT);
 
   _methodsCompiled++;
 }