In interp_masm_i486.cpp, InterpreterMacroAssembler::call_VM_leaf_base contains a bogus assert that the fix for 6481691 occassionally triggers. Steve Goldman found and removed the bogus assert as part of other work, but the fix hasn't made it back into any group workspace. This is the bogus assert #ifdef ASSERT { Label L; cmpl(esi, Address(ebp, frame::interpreter_frame_bcx_offset * wordSize)); jcc(Assembler::equal, L); stop("InterpreterMacroAssembler::call_VM_leaf_base: esi not callee saved?"); bind(L); } { Label L; cmpl(edi, Address(ebp, frame::interpreter_frame_locals_offset * wordSize)); jcc(Assembler::equal, L); stop("InterpreterMacroAssembler::call_VM_leaf_base: edi not callee saved?"); bind(L); } #endif Essentially, we're checking that esi and edi have the same values they had when before we called out to the runtime. We do not, however, want to save them here, as noted in a previous comment // Note: No need to save/restore bcp & locals (esi & edi) pointer // since these are callee saved registers and no blocking/ // GC can happen in leaf calls.
|