7125136: SIGILL on linux amd64 in gc/ArrayJuggle/Juggle29

For C2 moved saving EBP after ESP adjustment. For C1 generated 5 byte nop instruction first if needed.

Reviewed-by: never, twisti, azeemj
This commit is contained in:
Vladimir Kozlov 2012-02-15 21:37:49 -08:00
parent 24b07e7ae6
commit 539616f85a
6 changed files with 205 additions and 207 deletions

View file

@ -381,6 +381,16 @@ void C1_MacroAssembler::unverified_entry(Register receiver, Register ic_klass) {
void C1_MacroAssembler::verified_entry() {
if (C1Breakpoint || VerifyFPU || !UseStackBanging) {
// Verified Entry first instruction should be 5 bytes long for correct
// patching by patch_verified_entry().
//
// C1Breakpoint and VerifyFPU have one byte first instruction.
// Also first instruction will be one byte "push(rbp)" if stack banging
// code is not generated (see build_frame() above).
// For all these cases generate long instruction first.
fat_nop();
}
if (C1Breakpoint)int3();
// build frame
verify_FPU(0, "method_entry");