Mercurial > hg > graal-jvmci-8
diff src/cpu/x86/vm/macroAssembler_x86.cpp @ 23050:e8260b6328fb
8068945: Use RBP register as proper frame pointer in JIT compiled code on x86
Summary: Introduce the PreserveFramePointer flag to control if RBP is used as the frame pointer or as a general purpose register.
Reviewed-by: kvn, roland, dlong, enevill, shade
author | zmajo |
---|---|
date | Fri, 29 May 2015 10:58:45 +0200 |
parents | 5f8824f56f39 |
children | dd9cc155639c faef2a237329 51c505229e71 |
line wrap: on
line diff
--- a/src/cpu/x86/vm/macroAssembler_x86.cpp Fri Mar 27 10:57:42 2015 +0100 +++ b/src/cpu/x86/vm/macroAssembler_x86.cpp Fri May 29 10:58:45 2015 +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