Skip to content

Commit c73ad28

Browse files
Cesar Soares Lucastzezula
authored andcommitted
8359064: Expose reason for marking nmethod non-entrant to JVMCI client
Reviewed-by: dnsimon, never
1 parent e878b36 commit c73ad28

File tree

25 files changed

+294
-55
lines changed

25 files changed

+294
-55
lines changed

src/hotspot/share/c1/c1_Runtime1.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -818,7 +818,7 @@ JRT_ENTRY(void, Runtime1::deoptimize(JavaThread* current, jint trap_request))
818818
Deoptimization::DeoptReason reason = Deoptimization::trap_request_reason(trap_request);
819819

820820
if (action == Deoptimization::Action_make_not_entrant) {
821-
if (nm->make_not_entrant("C1 deoptimize")) {
821+
if (nm->make_not_entrant(nmethod::InvalidationReason::C1_DEOPTIMIZE)) {
822822
if (reason == Deoptimization::Reason_tenured) {
823823
MethodData* trap_mdo = Deoptimization::get_method_data(current, method, true /*create_if_missing*/);
824824
if (trap_mdo != nullptr) {
@@ -1110,7 +1110,7 @@ JRT_ENTRY(void, Runtime1::patch_code(JavaThread* current, C1StubId stub_id ))
11101110
// safepoint, but if it's still alive then make it not_entrant.
11111111
nmethod* nm = CodeCache::find_nmethod(caller_frame.pc());
11121112
if (nm != nullptr) {
1113-
nm->make_not_entrant("C1 code patch");
1113+
nm->make_not_entrant(nmethod::InvalidationReason::C1_CODEPATCH);
11141114
}
11151115

11161116
Deoptimization::deoptimize_frame(current, caller_frame.id());
@@ -1358,7 +1358,7 @@ void Runtime1::patch_code(JavaThread* current, C1StubId stub_id) {
13581358
// Make sure the nmethod is invalidated, i.e. made not entrant.
13591359
nmethod* nm = CodeCache::find_nmethod(caller_frame.pc());
13601360
if (nm != nullptr) {
1361-
nm->make_not_entrant("C1 deoptimize for patching");
1361+
nm->make_not_entrant(nmethod::InvalidationReason::C1_DEOPTIMIZE_FOR_PATCHING);
13621362
}
13631363
}
13641364

@@ -1486,7 +1486,7 @@ JRT_ENTRY(void, Runtime1::predicate_failed_trap(JavaThread* current))
14861486

14871487
nmethod* nm = CodeCache::find_nmethod(caller_frame.pc());
14881488
assert (nm != nullptr, "no more nmethod?");
1489-
nm->make_not_entrant("C1 predicate failed trap");
1489+
nm->make_not_entrant(nmethod::InvalidationReason::C1_PREDICATE_FAILED_TRAP);
14901490

14911491
methodHandle m(current, nm->method());
14921492
MethodData* mdo = m->method_data();

src/hotspot/share/ci/ciReplay.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -802,7 +802,7 @@ class CompileReplay : public StackObj {
802802
// Make sure the existence of a prior compile doesn't stop this one
803803
nmethod* nm = (entry_bci != InvocationEntryBci) ? method->lookup_osr_nmethod_for(entry_bci, comp_level, true) : method->code();
804804
if (nm != nullptr) {
805-
nm->make_not_entrant("CI replay");
805+
nm->make_not_entrant(nmethod::InvalidationReason::CI_REPLAY);
806806
}
807807
replay_state = this;
808808
CompileBroker::compile_method(methodHandle(THREAD, method), entry_bci, comp_level,

src/hotspot/share/code/codeCache.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1361,7 +1361,7 @@ void CodeCache::make_marked_nmethods_deoptimized() {
13611361
while(iter.next()) {
13621362
nmethod* nm = iter.method();
13631363
if (nm->is_marked_for_deoptimization() && !nm->has_been_deoptimized() && nm->can_be_deoptimized()) {
1364-
nm->make_not_entrant("marked for deoptimization");
1364+
nm->make_not_entrant(nmethod::InvalidationReason::MARKED_FOR_DEOPTIMIZATION);
13651365
nm->make_deoptimized();
13661366
}
13671367
}

src/hotspot/share/code/nmethod.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1975,14 +1975,12 @@ void nmethod::invalidate_osr_method() {
19751975
}
19761976
}
19771977

1978-
void nmethod::log_state_change(const char* reason) const {
1979-
assert(reason != nullptr, "Must provide a reason");
1980-
1978+
void nmethod::log_state_change(InvalidationReason invalidation_reason) const {
19811979
if (LogCompilation) {
19821980
if (xtty != nullptr) {
19831981
ttyLocker ttyl; // keep the following output all in one block
19841982
xtty->begin_elem("make_not_entrant thread='%zu' reason='%s'",
1985-
os::current_thread_id(), reason);
1983+
os::current_thread_id(), invalidation_reason_to_string(invalidation_reason));
19861984
log_identity(xtty);
19871985
xtty->stamp();
19881986
xtty->end_elem();
@@ -1991,7 +1989,7 @@ void nmethod::log_state_change(const char* reason) const {
19911989

19921990
ResourceMark rm;
19931991
stringStream ss(NEW_RESOURCE_ARRAY(char, 256), 256);
1994-
ss.print("made not entrant: %s", reason);
1992+
ss.print("made not entrant: %s", invalidation_reason_to_string(invalidation_reason));
19951993

19961994
CompileTask::print_ul(this, ss.freeze());
19971995
if (PrintCompilation) {
@@ -2006,9 +2004,7 @@ void nmethod::unlink_from_method() {
20062004
}
20072005

20082006
// Invalidate code
2009-
bool nmethod::make_not_entrant(const char* reason) {
2010-
assert(reason != nullptr, "Must provide a reason");
2011-
2007+
bool nmethod::make_not_entrant(InvalidationReason invalidation_reason) {
20122008
// This can be called while the system is already at a safepoint which is ok
20132009
NoSafepointVerifier nsv;
20142010

@@ -2066,7 +2062,7 @@ bool nmethod::make_not_entrant(const char* reason) {
20662062
assert(success, "Transition can't fail");
20672063

20682064
// Log the transition once
2069-
log_state_change(reason);
2065+
log_state_change(invalidation_reason);
20702066

20712067
// Remove nmethod from method.
20722068
unlink_from_method();
@@ -2077,7 +2073,7 @@ bool nmethod::make_not_entrant(const char* reason) {
20772073
// Invalidate can't occur while holding the NMethodState_lock
20782074
JVMCINMethodData* nmethod_data = jvmci_nmethod_data();
20792075
if (nmethod_data != nullptr) {
2080-
nmethod_data->invalidate_nmethod_mirror(this);
2076+
nmethod_data->invalidate_nmethod_mirror(this, invalidation_reason);
20812077
}
20822078
#endif
20832079

@@ -2115,7 +2111,9 @@ void nmethod::unlink() {
21152111
// Clear the link between this nmethod and a HotSpotNmethod mirror
21162112
JVMCINMethodData* nmethod_data = jvmci_nmethod_data();
21172113
if (nmethod_data != nullptr) {
2118-
nmethod_data->invalidate_nmethod_mirror(this);
2114+
nmethod_data->invalidate_nmethod_mirror(this, is_cold() ?
2115+
nmethod::InvalidationReason::UNLOADING_COLD :
2116+
nmethod::InvalidationReason::UNLOADING);
21192117
}
21202118
#endif
21212119

src/hotspot/share/code/nmethod.hpp

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,82 @@ class nmethod : public CodeBlob {
471471
void oops_do_set_strong_done(nmethod* old_head);
472472

473473
public:
474+
// If you change anything in this enum please patch
475+
// vmStructs_jvmci.cpp accordingly.
476+
enum class InvalidationReason : s1 {
477+
NOT_INVALIDATED = -1,
478+
C1_CODEPATCH,
479+
C1_DEOPTIMIZE,
480+
C1_DEOPTIMIZE_FOR_PATCHING,
481+
C1_PREDICATE_FAILED_TRAP,
482+
CI_REPLAY,
483+
UNLOADING,
484+
UNLOADING_COLD,
485+
JVMCI_INVALIDATE,
486+
JVMCI_MATERIALIZE_VIRTUAL_OBJECT,
487+
JVMCI_REPLACED_WITH_NEW_CODE,
488+
JVMCI_REPROFILE,
489+
MARKED_FOR_DEOPTIMIZATION,
490+
MISSING_EXCEPTION_HANDLER,
491+
NOT_USED,
492+
OSR_INVALIDATION_BACK_BRANCH,
493+
OSR_INVALIDATION_FOR_COMPILING_WITH_C1,
494+
OSR_INVALIDATION_OF_LOWER_LEVEL,
495+
SET_NATIVE_FUNCTION,
496+
UNCOMMON_TRAP,
497+
WHITEBOX_DEOPTIMIZATION,
498+
ZOMBIE,
499+
INVALIDATION_REASONS_COUNT
500+
};
501+
502+
503+
static const char* invalidation_reason_to_string(InvalidationReason invalidation_reason) {
504+
switch (invalidation_reason) {
505+
case InvalidationReason::C1_CODEPATCH:
506+
return "C1 code patch";
507+
case InvalidationReason::C1_DEOPTIMIZE:
508+
return "C1 deoptimized";
509+
case InvalidationReason::C1_DEOPTIMIZE_FOR_PATCHING:
510+
return "C1 deoptimize for patching";
511+
case InvalidationReason::C1_PREDICATE_FAILED_TRAP:
512+
return "C1 predicate failed trap";
513+
case InvalidationReason::CI_REPLAY:
514+
return "CI replay";
515+
case InvalidationReason::JVMCI_INVALIDATE:
516+
return "JVMCI invalidate";
517+
case InvalidationReason::JVMCI_MATERIALIZE_VIRTUAL_OBJECT:
518+
return "JVMCI materialize virtual object";
519+
case InvalidationReason::JVMCI_REPLACED_WITH_NEW_CODE:
520+
return "JVMCI replaced with new code";
521+
case InvalidationReason::JVMCI_REPROFILE:
522+
return "JVMCI reprofile";
523+
case InvalidationReason::MARKED_FOR_DEOPTIMIZATION:
524+
return "marked for deoptimization";
525+
case InvalidationReason::MISSING_EXCEPTION_HANDLER:
526+
return "missing exception handler";
527+
case InvalidationReason::NOT_USED:
528+
return "not used";
529+
case InvalidationReason::OSR_INVALIDATION_BACK_BRANCH:
530+
return "OSR invalidation back branch";
531+
case InvalidationReason::OSR_INVALIDATION_FOR_COMPILING_WITH_C1:
532+
return "OSR invalidation for compiling with C1";
533+
case InvalidationReason::OSR_INVALIDATION_OF_LOWER_LEVEL:
534+
return "OSR invalidation of lower level";
535+
case InvalidationReason::SET_NATIVE_FUNCTION:
536+
return "set native function";
537+
case InvalidationReason::UNCOMMON_TRAP:
538+
return "uncommon trap";
539+
case InvalidationReason::WHITEBOX_DEOPTIMIZATION:
540+
return "whitebox deoptimization";
541+
case InvalidationReason::ZOMBIE:
542+
return "zombie";
543+
default: {
544+
assert(false, "Unhandled reason");
545+
return "Unknown";
546+
}
547+
}
548+
}
549+
474550
// create nmethod with entry_bci
475551
static nmethod* new_nmethod(const methodHandle& method,
476552
int compile_id,
@@ -633,8 +709,8 @@ class nmethod : public CodeBlob {
633709
// alive. It is used when an uncommon trap happens. Returns true
634710
// if this thread changed the state of the nmethod or false if
635711
// another thread performed the transition.
636-
bool make_not_entrant(const char* reason);
637-
bool make_not_used() { return make_not_entrant("not used"); }
712+
bool make_not_entrant(InvalidationReason invalidation_reason);
713+
bool make_not_used() { return make_not_entrant(InvalidationReason::NOT_USED); }
638714

639715
bool is_marked_for_deoptimization() const { return deoptimization_status() != not_marked; }
640716
bool has_been_deoptimized() const { return deoptimization_status() == deoptimize_done; }
@@ -951,7 +1027,7 @@ class nmethod : public CodeBlob {
9511027
// Logging
9521028
void log_identity(xmlStream* log) const;
9531029
void log_new_nmethod() const;
954-
void log_state_change(const char* reason) const;
1030+
void log_state_change(InvalidationReason invalidation_reason) const;
9551031

9561032
// Prints block-level comments, including nmethod specific block labels:
9571033
void print_nmethod_labels(outputStream* stream, address block_begin, bool print_section_labels=true) const;

src/hotspot/share/compiler/compilationPolicy.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ void CompilationPolicy::compile(const methodHandle& mh, int bci, CompLevel level
924924
nmethod* osr_nm = mh->lookup_osr_nmethod_for(bci, CompLevel_simple, false);
925925
if (osr_nm != nullptr && osr_nm->comp_level() > CompLevel_simple) {
926926
// Invalidate the existing OSR nmethod so that a compile at CompLevel_simple is permitted.
927-
osr_nm->make_not_entrant("OSR invalidation for compiling with C1");
927+
osr_nm->make_not_entrant(nmethod::InvalidationReason::OSR_INVALIDATION_FOR_COMPILING_WITH_C1);
928928
}
929929
compile(mh, bci, CompLevel_simple, THREAD);
930930
}
@@ -1516,7 +1516,7 @@ void CompilationPolicy::method_back_branch_event(const methodHandle& mh, const m
15161516
int osr_bci = nm->is_osr_method() ? nm->osr_entry_bci() : InvocationEntryBci;
15171517
print_event(MAKE_NOT_ENTRANT, mh(), mh(), osr_bci, level);
15181518
}
1519-
nm->make_not_entrant("OSR invalidation, back branch");
1519+
nm->make_not_entrant(nmethod::InvalidationReason::OSR_INVALIDATION_BACK_BRANCH);
15201520
}
15211521
}
15221522
// Fix up next_level if necessary to avoid deopts

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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;
12191219
C2V_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+
12211229
C2V_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)))
13961404
C2V_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);
14021415
C2V_END
14031416

14041417
C2V_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)},

src/hotspot/share/jvmci/jvmciEnv.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,7 +1775,7 @@ void JVMCIEnv::initialize_installed_code(JVMCIObject installed_code, CodeBlob* c
17751775
}
17761776

17771777

1778-
void JVMCIEnv::invalidate_nmethod_mirror(JVMCIObject mirror, bool deoptimize, JVMCI_TRAPS) {
1778+
void JVMCIEnv::invalidate_nmethod_mirror(JVMCIObject mirror, bool deoptimize, nmethod::InvalidationReason invalidation_reason, JVMCI_TRAPS) {
17791779
if (mirror.is_null()) {
17801780
JVMCI_THROW(NullPointerException);
17811781
}
@@ -1798,7 +1798,7 @@ void JVMCIEnv::invalidate_nmethod_mirror(JVMCIObject mirror, bool deoptimize, JV
17981798

17991799
if (!deoptimize) {
18001800
// Prevent future executions of the nmethod but let current executions complete.
1801-
nm->make_not_entrant("JVMCI invalidate nmethod mirror");
1801+
nm->make_not_entrant(invalidation_reason);
18021802

18031803
// Do not clear the address field here as the Java code may still
18041804
// want to later call this method with deoptimize == true. That requires
@@ -1807,7 +1807,7 @@ void JVMCIEnv::invalidate_nmethod_mirror(JVMCIObject mirror, bool deoptimize, JV
18071807
// Deoptimize the nmethod immediately.
18081808
DeoptimizationScope deopt_scope;
18091809
deopt_scope.mark(nm);
1810-
nm->make_not_entrant("JVMCI invalidate nmethod mirror");
1810+
nm->make_not_entrant(invalidation_reason);
18111811
nm->make_deoptimized();
18121812
deopt_scope.deoptimize_marked();
18131813

src/hotspot/share/jvmci/jvmciEnv.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ class JVMCIEnv : public ResourceObj {
462462
// field of `mirror` to prevent it from being called.
463463
// If `deoptimize` is true, the nmethod is immediately deoptimized.
464464
// The HotSpotNmethod.address field is zero upon returning.
465-
void invalidate_nmethod_mirror(JVMCIObject mirror, bool deoptimze, JVMCI_TRAPS);
465+
void invalidate_nmethod_mirror(JVMCIObject mirror, bool deoptimze, nmethod::InvalidationReason invalidation_reason, JVMCI_TRAPS);
466466

467467
void initialize_installed_code(JVMCIObject installed_code, CodeBlob* cb, JVMCI_TRAPS);
468468

src/hotspot/share/jvmci/jvmciJavaClasses.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
boolean_field(HotSpotNmethod, profileDeopt) \
107107
long_field(HotSpotNmethod, compileIdSnapshot) \
108108
object_field(HotSpotNmethod, method, "Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl;") \
109+
int_field(HotSpotNmethod, invalidationReason) \
109110
jvmci_constructor(HotSpotNmethod, "(Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl;Ljava/lang/String;ZZJ)V") \
110111
end_class \
111112
start_class(HotSpotCompiledCode, jdk_vm_ci_hotspot_HotSpotCompiledCode) \

0 commit comments

Comments
 (0)