< 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 >