< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page
rev 51972 : 8209415: Fix JVMTI test failure HS202
Summary: Fix test for static method in exception throw handler
Reviewed-by: adinn

*** 1910,1921 **** #if INCLUDE_JVMTI { Label L_done; __ ldrb(rscratch1, Address(rbcp, 0)); ! __ cmpw(r1, Bytecodes::_invokestatic); ! __ br(Assembler::EQ, L_done); // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call. // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL. __ ldr(c_rarg0, Address(rlocals, 0)); --- 1910,1921 ---- #if INCLUDE_JVMTI { Label L_done; __ ldrb(rscratch1, Address(rbcp, 0)); ! __ cmpw(rscratch1, Bytecodes::_invokestatic); ! __ br(Assembler::NE, L_done); // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call. // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL. __ ldr(c_rarg0, Address(rlocals, 0));
*** 1946,1967 **** __ pop_ptr(r0); __ str(r0, Address(rthread, JavaThread::vm_result_offset())); // remove the activation (without doing throws on illegalMonitorExceptions) __ remove_activation(vtos, false, true, false); // restore exception - // restore exception __ get_vm_result(r0, rthread); // In between activations - previous activation type unknown yet // compute continuation point - the continuation point expects the // following registers set up: // // r0: exception // lr: return address/pc that threw exception ! // rsp: expression stack of caller // rfp: fp of caller - // FIXME: There's no point saving LR here because VM calls don't trash it __ stp(r0, lr, Address(__ pre(sp, -2 * wordSize))); // save exception & return address __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), rthread, lr); __ mov(r1, r0); // save exception handler --- 1946,1965 ---- __ pop_ptr(r0); __ str(r0, Address(rthread, JavaThread::vm_result_offset())); // remove the activation (without doing throws on illegalMonitorExceptions) __ remove_activation(vtos, false, true, false); // restore exception __ get_vm_result(r0, rthread); // In between activations - previous activation type unknown yet // compute continuation point - the continuation point expects the // following registers set up: // // r0: exception // lr: return address/pc that threw exception ! // esp: expression stack of caller // rfp: fp of caller __ stp(r0, lr, Address(__ pre(sp, -2 * wordSize))); // save exception & return address __ super_call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), rthread, lr); __ mov(r1, r0); // save exception handler
< prev index next >