--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Mon Aug 15 14:08:01 2016 -0700
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Tue Aug 16 09:19:13 2016 -0700
@@ -752,8 +752,7 @@
}
}
-void MacroAssembler::reset_last_Java_frame(bool clear_fp,
- bool clear_pc) {
+void MacroAssembler::reset_last_Java_frame(bool clear_fp) {
// we must set sp to zero to clear frame
movptr(Address(r15_thread, JavaThread::last_Java_sp_offset()), NULL_WORD);
// must clear fp, so that compiled frames are not confused; it is
@@ -762,9 +761,8 @@
movptr(Address(r15_thread, JavaThread::last_Java_fp_offset()), NULL_WORD);
}
- if (clear_pc) {
- movptr(Address(r15_thread, JavaThread::last_Java_pc_offset()), NULL_WORD);
- }
+ // Always clear the pc because it could have been set by make_walkable()
+ movptr(Address(r15_thread, JavaThread::last_Java_pc_offset()), NULL_WORD);
}
void MacroAssembler::set_last_Java_frame(Register last_java_sp,
@@ -2531,7 +2529,7 @@
}
// reset last Java frame
// Only interpreter should have to clear fp
- reset_last_Java_frame(java_thread, true, false);
+ reset_last_Java_frame(java_thread, true);
// C++ interp handles this in the interpreter
check_and_handle_popframe(java_thread);
@@ -3642,8 +3640,7 @@
pusha();
}
-void MacroAssembler::reset_last_Java_frame(Register java_thread, bool clear_fp, bool clear_pc) {
- // determine java_thread register
+void MacroAssembler::reset_last_Java_frame(Register java_thread, bool clear_fp) { // determine java_thread register
if (!java_thread->is_valid()) {
java_thread = rdi;
get_thread(java_thread);
@@ -3654,8 +3651,8 @@
movptr(Address(java_thread, JavaThread::last_Java_fp_offset()), NULL_WORD);
}
- if (clear_pc)
- movptr(Address(java_thread, JavaThread::last_Java_pc_offset()), NULL_WORD);
+ // Always clear the pc because it could have been set by make_walkable()
+ movptr(Address(java_thread, JavaThread::last_Java_pc_offset()), NULL_WORD);
}