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