8161598: Kitchensink fails: assert(nm->insts_contains(original_pc)) failed: original PC must be in nmethod/CompiledMethod

Skip unwalkable frames in

Reviewed-by: fparain, coleenp, aph
This commit is contained in:
Dean Long 2016-08-16 09:19:13 -07:00
parent 72dcc9193e
commit 6e820bb025
20 changed files with 77 additions and 76 deletions

View file

@ -752,8 +752,7 @@ void MacroAssembler::pushptr(AddressLiteral src) {
}
}
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 @@ void MacroAssembler::reset_last_Java_frame(bool clear_fp,
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 @@ void MacroAssembler::call_VM_base(Register oop_result,
}
// 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 @@ void MacroAssembler::push_IU_state() {
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 @@ void MacroAssembler::reset_last_Java_frame(Register java_thread, bool clear_fp,
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);
}