--- old/src/cpu/x86/vm/macroAssembler_x86.cpp 2015-05-29 13:57:34.733083368 +0200 +++ new/src/cpu/x86/vm/macroAssembler_x86.cpp 2015-05-29 13:57:34.501083379 +0200 @@ -6122,6 +6122,10 @@ // We always push rbp, so that on return to interpreter rbp, will be // restored correctly and we can correct the stack. push(rbp); + // Save caller's stack pointer into RBP if the frame pointer is preserved. + if (PreserveFramePointer) { + mov(rbp, rsp); + } // Remove word for ebp framesize -= wordSize; @@ -6136,6 +6140,11 @@ // Save RBP register now. framesize -= wordSize; movptr(Address(rsp, framesize), rbp); + // Save caller's stack pointer into RBP if the frame pointer is preserved. + if (PreserveFramePointer) { + movptr(rbp, rsp); + addptr(rbp, framesize + wordSize); + } } if (VerifyStackAtCalls) { // Majik cookie to verify stack depth