Skip to content
4 changes: 3 additions & 1 deletion src/hotspot/share/code/nmethod.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2122,7 +2122,9 @@
// Clear the link between this nmethod and a HotSpotNmethod mirror
JVMCINMethodData* nmethod_data = jvmci_nmethod_data();
if (nmethod_data != nullptr) {
nmethod_data->invalidate_nmethod_mirror(this, is_cold() ? nmethod::InvalidationReason::GC_UNLINKING_COLD : nmethod::InvalidationReason::GC_UNLINKING);
nmethod_data->invalidate_nmethod_mirror(this, is_cold() ?

Check failure on line 2125 in src/hotspot/share/code/nmethod.cpp

View check run for this annotation

openjdk / jcheck-openjdk/jdk-25706

Whitespace error

Column 61: trailing whitespace
nmethod::InvalidationReason::UNLOADING_COLD :

Check failure on line 2126 in src/hotspot/share/code/nmethod.cpp

View check run for this annotation

openjdk / jcheck-openjdk/jdk-25706

Whitespace error

Column 57: trailing whitespace
nmethod::InvalidationReason::UNLOADING);
}
#endif

Expand Down
8 changes: 5 additions & 3 deletions src/hotspot/share/code/nmethod.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -473,15 +473,16 @@ class nmethod : public CodeBlob {
public:
// If you change anything in this enum please patch
// vmStructs_jvmci.cpp accordingly.
enum class InvalidationReason : u1 {
enum class InvalidationReason : s1 {
NOT_INVALIDATED = -1,
UNKNOWN,
C1_CODEPATCH,
C1_DEOPTIMIZE,
C1_DEOPTIMIZE_FOR_PATCHING,
C1_PREDICATE_FAILED_TRAP,
CI_REPLAY,
GC_UNLINKING,
GC_UNLINKING_COLD,
UNLOADING,
UNLOADING_COLD,
JVMCI_INVALIDATE,
JVMCI_MATERIALIZE_VIRTUAL_OBJECT,
JVMCI_REPLACED_WITH_NEW_CODE,
Expand All @@ -496,6 +497,7 @@ class nmethod : public CodeBlob {
UNCOMMON_TRAP,
WHITEBOX_DEOPTIMIZATION,
ZOMBIE,
LAST_REASON
};


Expand Down
7 changes: 7 additions & 0 deletions src/hotspot/share/jvmci/jvmciCompilerToVM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1405,6 +1405,13 @@ C2V_END


C2V_VMENTRY(void, invalidateHotSpotNmethod, (JNIEnv* env, jobject, jobject hs_nmethod, jboolean deoptimize, jint invalidation_reason))
#ifdef ASSERT
int first = static_cast<int>(nmethod::InvalidationReason::UNKNOWN);
int last = static_cast<int>(nmethod::InvalidationReason::LAST_REASON);
assert(invalidation_reason >= first && invalidation_reason < last,
"invalidation_reason (%d) outside valid range [%d, %d)",
invalidation_reason, first, last);
#endif
JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod);
JVMCIENV->invalidate_nmethod_mirror(nmethod_mirror, deoptimize, static_cast<nmethod::InvalidationReason>(invalidation_reason), JVMCI_CHECK);
C2V_END
Expand Down
10 changes: 8 additions & 2 deletions src/hotspot/share/jvmci/jvmciRuntime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -815,15 +815,21 @@ void JVMCINMethodData::invalidate_nmethod_mirror(nmethod* nm, nmethod::Invalidat
// an InvalidInstalledCodeException.
HotSpotJVMCI::InstalledCode::set_address(jvmciEnv, nmethod_mirror, 0);
HotSpotJVMCI::InstalledCode::set_entryPoint(jvmciEnv, nmethod_mirror, 0);
HotSpotJVMCI::HotSpotNmethod::set_invalidationReason(jvmciEnv, nmethod_mirror, static_cast<int>(invalidation_reason));
HotSpotJVMCI::HotSpotInstalledCode::set_codeStart(jvmciEnv, nmethod_mirror, 0);
if (HotSpotJVMCI::HotSpotNmethod::invalidationReason(jvmciEnv, nmethod_mirror) ==
static_cast<int>(nmethod::InvalidationReason::NOT_INVALIDATED)) {
HotSpotJVMCI::HotSpotNmethod::set_invalidationReason(jvmciEnv, nmethod_mirror, static_cast<int>(invalidation_reason));
}
} else if (nm->is_not_entrant()) {
// Zero the entry point so any new invocation will fail but keep
// the address link around that so that existing activations can
// be deoptimized via the mirror (i.e. JVMCIEnv::invalidate_installed_code).
HotSpotJVMCI::InstalledCode::set_entryPoint(jvmciEnv, nmethod_mirror, 0);
HotSpotJVMCI::HotSpotNmethod::set_invalidationReason(jvmciEnv, nmethod_mirror, static_cast<int>(invalidation_reason));
HotSpotJVMCI::HotSpotInstalledCode::set_codeStart(jvmciEnv, nmethod_mirror, 0);
if (HotSpotJVMCI::HotSpotNmethod::invalidationReason(jvmciEnv, nmethod_mirror) ==
static_cast<int>(nmethod::InvalidationReason::NOT_INVALIDATED)) {
HotSpotJVMCI::HotSpotNmethod::set_invalidationReason(jvmciEnv, nmethod_mirror, static_cast<int>(invalidation_reason));
}
}
}

Expand Down
5 changes: 3 additions & 2 deletions src/hotspot/share/jvmci/vmStructs_jvmci.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -565,14 +565,15 @@
declare_constant_with_value("OMCache::oop_to_oop_difference", OMCache::oop_to_oop_difference()) \
declare_constant_with_value("OMCache::oop_to_monitor_difference", OMCache::oop_to_monitor_difference()) \
\
declare_constant(nmethod::InvalidationReason::NOT_INVALIDATED) \
declare_constant(nmethod::InvalidationReason::UNKNOWN) \
declare_constant(nmethod::InvalidationReason::C1_CODEPATCH) \
declare_constant(nmethod::InvalidationReason::C1_DEOPTIMIZE) \
declare_constant(nmethod::InvalidationReason::C1_DEOPTIMIZE_FOR_PATCHING) \
declare_constant(nmethod::InvalidationReason::C1_PREDICATE_FAILED_TRAP) \
declare_constant(nmethod::InvalidationReason::CI_REPLAY) \
declare_constant(nmethod::InvalidationReason::GC_UNLINKING) \
declare_constant(nmethod::InvalidationReason::GC_UNLINKING_COLD) \
declare_constant(nmethod::InvalidationReason::UNLOADING) \
declare_constant(nmethod::InvalidationReason::UNLOADING_COLD) \
declare_constant(nmethod::InvalidationReason::JVMCI_INVALIDATE) \
declare_constant(nmethod::InvalidationReason::JVMCI_MATERIALIZE_VIRTUAL_OBJECT) \
declare_constant(nmethod::InvalidationReason::JVMCI_REPLACED_WITH_NEW_CODE) \
Expand Down