Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.

Commit ad457af

Browse files
Ekaterina VergizovaYuri Nesterenko
authored andcommitted
8239477: jdk/jfr/jcmd/TestJcmdStartStopDefault.java fails -XX:+VerifyOops with "verify_oop: rsi: broken oop"
Use T_ADDRESS instead of T_OBJECT to load metadata. Reviewed-by: yan Backport-of: b5775c8
1 parent 97ba018 commit ad457af

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/hotspot/share/c1/c1_LIRGenerator.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2966,16 +2966,18 @@ void LIRGenerator::do_ClassIDIntrinsic(Intrinsic* x) {
29662966
void LIRGenerator::do_getEventWriter(Intrinsic* x) {
29672967
LabelObj* L_end = new LabelObj();
29682968

2969+
// FIXME T_ADDRESS should actually be T_METADATA but it can't because the
2970+
// meaning of these two is mixed up (see JDK-8026837).
29692971
LIR_Address* jobj_addr = new LIR_Address(getThreadPointer(),
29702972
in_bytes(THREAD_LOCAL_WRITER_OFFSET_JFR),
2971-
T_OBJECT);
2973+
T_ADDRESS);
29722974
LIR_Opr result = rlock_result(x);
2973-
__ move_wide(jobj_addr, result);
2974-
__ cmp(lir_cond_equal, result, LIR_OprFact::oopConst(NULL));
2975+
__ move(LIR_OprFact::oopConst(NULL), result);
2976+
LIR_Opr jobj = new_register(T_METADATA);
2977+
__ move_wide(jobj_addr, jobj);
2978+
__ cmp(lir_cond_equal, jobj, LIR_OprFact::metadataConst(0));
29752979
__ branch(lir_cond_equal, T_OBJECT, L_end->label());
29762980

2977-
LIR_Opr jobj = new_register(T_OBJECT);
2978-
__ move(result, jobj);
29792981
access_load(IN_NATIVE, T_OBJECT, LIR_OprFact::address(new LIR_Address(jobj, T_OBJECT)), result);
29802982

29812983
__ branch_destination(L_end->label());

0 commit comments

Comments
 (0)