< prev index next >
src/cpu/aarch64/vm/macroAssembler_aarch64.cpp
Print this page
rev 11804 : 8164113: AArch64: follow-up the fix for 8161598
Reviewed-by: duke
*** 272,294 ****
void MacroAssembler::serialize_memory(Register thread, Register tmp) {
dsb(Assembler::SY);
}
! void MacroAssembler::reset_last_Java_frame(bool clear_fp,
! bool clear_pc) {
// we must set sp to zero to clear frame
str(zr, Address(rthread, JavaThread::last_Java_sp_offset()));
// must clear fp, so that compiled frames are not confused; it is
// possible that we need it only for debugging
if (clear_fp) {
str(zr, Address(rthread, JavaThread::last_Java_fp_offset()));
}
! if (clear_pc) {
str(zr, Address(rthread, JavaThread::last_Java_pc_offset()));
- }
}
// Calls to C land
//
// When entering C land, the rfp, & resp of the last Java frame have to be recorded
--- 272,293 ----
void MacroAssembler::serialize_memory(Register thread, Register tmp) {
dsb(Assembler::SY);
}
! void MacroAssembler::reset_last_Java_frame(bool clear_fp) {
// we must set sp to zero to clear frame
str(zr, Address(rthread, JavaThread::last_Java_sp_offset()));
+
// must clear fp, so that compiled frames are not confused; it is
// possible that we need it only for debugging
if (clear_fp) {
str(zr, Address(rthread, JavaThread::last_Java_fp_offset()));
}
! // Always clear the pc because it could have been set by make_walkable()
str(zr, Address(rthread, JavaThread::last_Java_pc_offset()));
}
// Calls to C land
//
// When entering C land, the rfp, & resp of the last Java frame have to be recorded
*** 630,640 ****
// do the call, remove parameters
MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments, &l);
// reset last Java frame
// Only interpreter should have to clear fp
! reset_last_Java_frame(true, true);
// C++ interp handles this in the interpreter
check_and_handle_popframe(java_thread);
check_and_handle_earlyret(java_thread);
--- 629,639 ----
// do the call, remove parameters
MacroAssembler::call_VM_leaf_base(entry_point, number_of_arguments, &l);
// reset last Java frame
// Only interpreter should have to clear fp
! reset_last_Java_frame(true);
// C++ interp handles this in the interpreter
check_and_handle_popframe(java_thread);
check_and_handle_earlyret(java_thread);
*** 873,883 ****
void MacroAssembler:: notify(int type) {
if (type == bytecode_start) {
// set_last_Java_frame(esp, rfp, (address)NULL);
Assembler:: notify(type);
! // reset_last_Java_frame(true, false);
}
else
Assembler:: notify(type);
}
--- 872,882 ----
void MacroAssembler:: notify(int type) {
if (type == bytecode_start) {
// set_last_Java_frame(esp, rfp, (address)NULL);
Assembler:: notify(type);
! // reset_last_Java_frame(true);
}
else
Assembler:: notify(type);
}
< prev index next >