Skip to content

Commit 6e4d7e8

Browse files
committed
Adaptations for 17u.
1 parent 972a763 commit 6e4d7e8

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/hotspot/cpu/ppc/frame_ppc.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,19 +129,21 @@ bool frame::safe_for_sender(JavaThread *thread) {
129129
return false;
130130
}
131131

132-
intptr_t* unextended_sender_sp = is_interpreted_frame() ? interpreter_frame_sender_sp() : sender_sp;
132+
intptr_t* unextended_sender_sp = is_interpreted_frame() ? (intptr_t*)get_ijava_state()->sender_sp : sender_sp;
133133

134+
// It should be safe to construct the sender though it might not be valid.
135+
136+
// JDK-8339386 is different than the upstream version:
137+
// The frame constructor doesn't check sanity of a deopt pc, but determines it.
138+
// Other accessors for reading it are not available in 17u.
139+
frame sender(sender_sp, sender_pc, unextended_sender_sp);
134140
// If the sender is a deoptimized nmethod we need to check if the original pc is valid.
135141
nmethod* sender_nm = sender_blob->as_nmethod_or_null();
136-
if (sender_nm != nullptr && sender_nm->is_deopt_pc(sender_pc)) {
137-
address orig_pc = *(address*)((address)unextended_sender_sp + sender_nm->orig_pc_offset());
142+
if (sender_nm != nullptr && sender._deopt_state == is_deoptimized) {
143+
address orig_pc = sender.pc();
138144
if (!sender_nm->insts_contains_inclusive(orig_pc)) return false;
139145
}
140146

141-
// It should be safe to construct the sender though it might not be valid.
142-
143-
frame sender(sender_sp, sender_pc, unextended_sender_sp, nullptr /* fp */, sender_blob);
144-
145147
// Do we have a valid fp?
146148
address sender_fp = (address) sender.fp();
147149

0 commit comments

Comments
 (0)