Skip to content

Commit 1d258ba

Browse files
offamitkumarPaul Hohensee
authored andcommitted
8342409: [s390x] C1 unwind_handler fails to unlock synchronized methods with LM_MONITOR
Backport-of: 9201e9f
1 parent d620426 commit 1d258ba

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,11 @@ int LIR_Assembler::emit_unwind_handler() {
230230
LIR_Opr lock = FrameMap::as_opr(Z_R1_scratch);
231231
monitor_address(0, lock);
232232
stub = new MonitorExitStub(lock, true, 0);
233-
__ unlock_object(Rtmp1, Rtmp2, lock->as_register(), *stub->entry());
233+
if (LockingMode == LM_MONITOR) {
234+
__ branch_optimized(Assembler::bcondAlways, *stub->entry());
235+
} else {
236+
__ unlock_object(Rtmp1, Rtmp2, lock->as_register(), *stub->entry());
237+
}
234238
__ bind(*stub->continuation());
235239
}
236240

src/hotspot/cpu/s390/c1_MacroAssembler_s390.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ void C1_MacroAssembler::lock_object(Register Rmark, Register Roop, Register Rbox
119119
branch_optimized(Assembler::bcondNotZero, slow_case);
120120
// done
121121
bind(done);
122+
} else {
123+
assert(false, "Unhandled LockingMode:%d", LockingMode);
122124
}
123125
}
124126

@@ -155,6 +157,8 @@ void C1_MacroAssembler::unlock_object(Register Rmark, Register Roop, Register Rb
155157
// If the object header was not pointing to the displaced header,
156158
// we do unlocking via runtime call.
157159
branch_optimized(Assembler::bcondNotEqual, slow_case);
160+
} else {
161+
assert(false, "Unhandled LockingMode:%d", LockingMode);
158162
}
159163
// done
160164
bind(done);

0 commit comments

Comments
 (0)