@@ -1207,7 +1207,7 @@ C2V_VMENTRY_0(jint, installCode0, (JNIEnv *env, jobject,
12071207 assert (JVMCIENV->isa_HotSpotNmethod (installed_code_handle), " wrong type" );
12081208 // Clear the link to an old nmethod first
12091209 JVMCIObject nmethod_mirror = installed_code_handle;
1210- JVMCIENV->invalidate_nmethod_mirror (nmethod_mirror, true , JVMCI_CHECK_0);
1210+ JVMCIENV->invalidate_nmethod_mirror (nmethod_mirror, true , nmethod::InvalidationReason::JVMCI_REPLACED_WITH_NEW_CODE, JVMCI_CHECK_0);
12111211 } else {
12121212 assert (JVMCIENV->isa_InstalledCode (installed_code_handle), " wrong type" );
12131213 }
@@ -1218,6 +1218,14 @@ C2V_VMENTRY_0(jint, installCode0, (JNIEnv *env, jobject,
12181218 return result;
12191219C2V_END
12201220
1221+ C2V_VMENTRY_0 (jobject, getInvalidationReasonDescription, (JNIEnv *env, jobject, jint invalidation_reason))
1222+ HandleMark hm(THREAD);
1223+ JNIHandleMark jni_hm (thread);
1224+ nmethod::InvalidationReason reason = static_cast <nmethod::InvalidationReason>(invalidation_reason);
1225+ JVMCIObject desc = JVMCIENV->create_string (nmethod::invalidation_reason_to_string(reason), JVMCI_CHECK_NULL);
1226+ return JVMCIENV->get_jobject (desc);
1227+ C2V_END
1228+
12211229C2V_VMENTRY (void , resetCompilationStatistics, (JNIEnv* env, jobject))
12221230 JVMCICompiler* compiler = JVMCICompiler::instance(true , CHECK);
12231231 CompilerStatistics* stats = compiler->stats ();
@@ -1383,7 +1391,7 @@ C2V_VMENTRY(void, reprofile, (JNIEnv* env, jobject, ARGUMENT_PAIR(method)))
13831391
13841392 nmethod* code = method->code ();
13851393 if (code != nullptr ) {
1386- code->make_not_entrant (" JVMCI reprofile " );
1394+ code->make_not_entrant (nmethod::InvalidationReason::JVMCI_REPROFILE );
13871395 }
13881396
13891397 MethodData* method_data = method->method_data ();
@@ -1396,9 +1404,14 @@ C2V_VMENTRY(void, reprofile, (JNIEnv* env, jobject, ARGUMENT_PAIR(method)))
13961404C2V_END
13971405
13981406
1399- C2V_VMENTRY (void , invalidateHotSpotNmethod, (JNIEnv* env, jobject, jobject hs_nmethod, jboolean deoptimize))
1407+ C2V_VMENTRY (void , invalidateHotSpotNmethod, (JNIEnv* env, jobject, jobject hs_nmethod, jboolean deoptimize, jint invalidation_reason))
1408+ int first = static_cast<int>(nmethod::InvalidationReason::C1_CODEPATCH);
1409+ int last = static_cast <int >(nmethod::InvalidationReason::INVALIDATION_REASONS_COUNT);
1410+ if (invalidation_reason < first || invalidation_reason >= last) {
1411+ JVMCI_THROW_MSG (IllegalArgumentException, err_msg (" Invalid invalidation_reason: %d" , invalidation_reason));
1412+ }
14001413 JVMCIObject nmethod_mirror = JVMCIENV->wrap (hs_nmethod);
1401- JVMCIENV->invalidate_nmethod_mirror (nmethod_mirror, deoptimize, JVMCI_CHECK);
1414+ JVMCIENV->invalidate_nmethod_mirror (nmethod_mirror, deoptimize, static_cast <nmethod::InvalidationReason>(invalidation_reason), JVMCI_CHECK);
14021415C2V_END
14031416
14041417C2V_VMENTRY_NULL (jlongArray, collectCounters, (JNIEnv* env, jobject))
@@ -1823,7 +1836,7 @@ C2V_VMENTRY(void, materializeVirtualObjects, (JNIEnv* env, jobject, jobject _hs_
18231836 if (!fst.current ()->is_compiled_frame ()) {
18241837 JVMCI_THROW_MSG (IllegalStateException, " compiled stack frame expected" );
18251838 }
1826- fst.current ()->cb ()->as_nmethod ()->make_not_entrant (" JVMCI materialize virtual objects " );
1839+ fst.current ()->cb ()->as_nmethod ()->make_not_entrant (nmethod::InvalidationReason::JVMCI_MATERIALIZE_VIRTUAL_OBJECT );
18271840 }
18281841 Deoptimization::deoptimize (thread, *fst.current(), Deoptimization::Reason_none);
18291842 // look for the frame again as it has been updated by deopt (pc, deopt state...)
@@ -3453,6 +3466,7 @@ JNINativeMethod CompilerToVM::methods[] = {
34533466 {CC " getImplementor" , CC " (" HS_KLASS2 " )" HS_KLASS, FN_PTR (getImplementor)},
34543467 {CC " getInstallCodeFlags" , CC " ()I" , FN_PTR (getInstallCodeFlags)},
34553468 {CC " getInterfaces" , CC " (" HS_KLASS2 " )[" HS_KLASS, FN_PTR (getInterfaces)},
3469+ {CC " getInvalidationReasonDescription" , CC " (I)" STRING, FN_PTR (getInvalidationReasonDescription)},
34563470 {CC " getJavaMirror" , CC " (" HS_KLASS2 " )" OBJECTCONSTANT, FN_PTR (getJavaMirror)},
34573471 {CC " getJObjectValue" , CC " (" OBJECTCONSTANT " )J" , FN_PTR (getJObjectValue)},
34583472 {CC " getLineNumberTable" , CC " (" HS_METHOD2 " )[J" , FN_PTR (getLineNumberTable)},
@@ -3478,7 +3492,7 @@ JNINativeMethod CompilerToVM::methods[] = {
34783492 {CC " hasNeverInlineDirective" , CC " (" HS_METHOD2 " )Z" , FN_PTR (hasNeverInlineDirective)},
34793493 {CC " installCode0" , CC " (JJZ" HS_COMPILED_CODE " [" OBJECT INSTALLED_CODE " J[B)I" , FN_PTR (installCode0)},
34803494 {CC " interpreterFrameSize" , CC " (" BYTECODE_FRAME " )I" , FN_PTR (interpreterFrameSize)},
3481- {CC " invalidateHotSpotNmethod" , CC " (" HS_NMETHOD " Z )V" , FN_PTR (invalidateHotSpotNmethod)},
3495+ {CC " invalidateHotSpotNmethod" , CC " (" HS_NMETHOD " ZI )V" , FN_PTR (invalidateHotSpotNmethod)},
34823496 {CC " isAssignableFrom" , CC " (" HS_KLASS2 HS_KLASS2 " )Z" , FN_PTR (isAssignableFrom)},
34833497 {CC " isCompilable" , CC " (" HS_METHOD2 " )Z" , FN_PTR (isCompilable)},
34843498 {CC " isCompilerThread" , CC " ()Z" , FN_PTR (isCompilerThread)},
0 commit comments