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.