diff -r f95ef5511e1f -r 2ed1c37df3a5 src/hotspot/cpu/sparc/templateTable_sparc.cpp --- a/src/hotspot/cpu/sparc/templateTable_sparc.cpp Fri Mar 09 12:03:20 2018 -0500 +++ b/src/hotspot/cpu/sparc/templateTable_sparc.cpp Thu Feb 08 09:23:49 2018 +0100 @@ -3137,8 +3137,10 @@ __ sub(Rindex, Method::itable_index_max, Rindex); __ neg(Rindex); + // Preserve O2_Klass for throw_AbstractMethodErrorVerbose + __ mov(O2_Klass, O4); __ lookup_interface_method(// inputs: rec. class, interface, itable index - O2_Klass, Rinterface, Rindex, + O4, Rinterface, Rindex, // outputs: method, scan temp reg, temp reg G5_method, Rscratch, Rtemp, L_no_such_interface); @@ -3147,7 +3149,9 @@ { Label ok; __ br_notnull_short(G5_method, Assembler::pt, ok); - call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodError)); + // Pass arguments for generating a verbose error message. + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_AbstractMethodErrorVerbose), + O2_Klass, Rmethod); __ should_not_reach_here(); __ bind(ok); } @@ -3160,7 +3164,9 @@ __ call_from_interpreter(Rcall, Gargs, Rret); __ bind(L_no_such_interface); - call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_IncompatibleClassChangeError)); + // Pass arguments for generating a verbose error message. + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_IncompatibleClassChangeErrorVerbose), + O2_Klass, Rinterface); __ should_not_reach_here(); } @@ -3536,7 +3542,7 @@ void TemplateTable::_breakpoint() { // Note: We get here even if we are single stepping.. - // jbug inists on setting breakpoints at every bytecode + // jbug insists on setting breakpoints at every bytecode // even if we are in single step mode. transition(vtos, vtos);