hotspot/src/cpu/x86/vm/macroAssembler_x86.cpp
changeset 30305 b92a97e1e9cb
parent 30299 1f6f7d1e0c1e
child 30310 522ea430079f
--- 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