6161#include " runtime/globals_extension.hpp"
6262#include " runtime/interfaceSupport.inline.hpp"
6363#include " runtime/jniHandles.inline.hpp"
64+ #include " runtime/keepStackGCProcessed.hpp"
6465#include " runtime/reflection.hpp"
6566#include " runtime/stackFrameStream.inline.hpp"
6667#include " runtime/timerTrace.hpp"
@@ -1106,13 +1107,15 @@ C2V_VMENTRY_0(jint, installCode0, (JNIEnv *env, jobject,
11061107 TraceTime install_time (" installCode" , timer);
11071108
11081109 CodeInstaller installer (JVMCIENV);
1110+ JVMCINMethodHandle nmethod_handle (THREAD);
11091111
11101112 JVMCI::CodeInstallResult result = installer.install(compiler,
11111113 compiled_code_buffer,
11121114 with_type_info,
11131115 compiled_code_handle,
11141116 object_pool_handle,
11151117 cb,
1118+ nmethod_handle,
11161119 installed_code_handle,
11171120 (FailedSpeculation**)(address) failed_speculations_address,
11181121 speculations,
@@ -1204,7 +1207,8 @@ C2V_VMENTRY_NULL(jobject, executeHotSpotNmethod, (JNIEnv* env, jobject, jobject
12041207 HandleMark hm (THREAD);
12051208
12061209 JVMCIObject nmethod_mirror = JVMCIENV->wrap (hs_nmethod);
1207- nmethod* nm = JVMCIENV->get_nmethod (nmethod_mirror);
1210+ JVMCINMethodHandle nmethod_handle (THREAD);
1211+ nmethod* nm = JVMCIENV->get_nmethod (nmethod_mirror, nmethod_handle);
12081212 if (nm == nullptr || !nm->is_in_use ()) {
12091213 JVMCI_THROW_NULL (InvalidInstalledCodeException);
12101214 }
@@ -1478,6 +1482,7 @@ C2V_VMENTRY_NULL(jobject, iterateFrames, (JNIEnv* env, jobject compilerToVM, job
14781482 return nullptr ;
14791483 }
14801484 Handle visitor (THREAD, JNIHandles::resolve_non_null(visitor_handle));
1485+ KeepStackGCProcessedMark keep_stack (THREAD);
14811486
14821487 requireInHotSpot (" iterateFrames" , JVMCI_CHECK_NULL);
14831488
@@ -2762,7 +2767,8 @@ C2V_VMENTRY_0(jlong, translate, (JNIEnv* env, jobject, jobject obj_handle, jbool
27622767 result = PEER_JVMCIENV->get_object_constant (constant ());
27632768 } else if (thisEnv->isa_HotSpotNmethod (obj)) {
27642769 if (PEER_JVMCIENV->is_hotspot ()) {
2765- nmethod* nm = JVMCIENV->get_nmethod (obj);
2770+ JVMCINMethodHandle nmethod_handle (THREAD);
2771+ nmethod* nm = JVMCIENV->get_nmethod (obj, nmethod_handle);
27662772 if (nm != nullptr ) {
27672773 JVMCINMethodData* data = nm->jvmci_nmethod_data ();
27682774 if (data != nullptr ) {
@@ -2785,7 +2791,8 @@ C2V_VMENTRY_0(jlong, translate, (JNIEnv* env, jobject, jobject obj_handle, jbool
27852791 const char * cstring = name_string.is_null () ? nullptr : thisEnv->as_utf8_string (name_string);
27862792 // Create a new HotSpotNmethod instance in the peer runtime
27872793 result = PEER_JVMCIENV->new_HotSpotNmethod (mh, cstring, isDefault, compileIdSnapshot, JVMCI_CHECK_0);
2788- nmethod* nm = JVMCIENV->get_nmethod (obj);
2794+ JVMCINMethodHandle nmethod_handle (THREAD);
2795+ nmethod* nm = JVMCIENV->get_nmethod (obj, nmethod_handle);
27892796 if (result.is_null ()) {
27902797 // exception occurred (e.g. OOME) creating a new HotSpotNmethod
27912798 } else if (nm == nullptr ) {
@@ -2837,7 +2844,8 @@ C2V_END
28372844C2V_VMENTRY (void , updateHotSpotNmethod, (JNIEnv* env, jobject, jobject code_handle))
28382845 JVMCIObject code = JVMCIENV->wrap(code_handle);
28392846 // Execute this operation for the side effect of updating the InstalledCode state
2840- JVMCIENV->get_nmethod (code);
2847+ JVMCINMethodHandle nmethod_handle (THREAD);
2848+ JVMCIENV->get_nmethod (code, nmethod_handle);
28412849C2V_END
28422850
28432851C2V_VMENTRY_NULL (jbyteArray, getCode, (JNIEnv* env, jobject, jobject code_handle))
0 commit comments