--- a/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Wed Apr 22 19:10:03 2015 +0300
+++ b/hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp Mon Apr 27 10:49:43 2015 +0200
@@ -6090,6 +6090,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;
@@ -6104,6 +6108,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