agent/src/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
8068945-8u-patched Cdiff agent/src/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java
agent/src/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java
Print this page
rev 7386 : 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
*** 315,344 ****
}
//------------------------------------------------------------------------------
// frame::adjust_unextended_sp
private void adjustUnextendedSP() {
! // If we are returning to a compiled MethodHandle call site, the
! // saved_fp will in fact be a saved value of the unextended SP. The
! // simplest way to tell whether we are returning to such a call site
! // is as follows:
CodeBlob cb = cb();
NMethod senderNm = (cb == null) ? null : cb.asNMethodOrNull();
if (senderNm != null) {
! // If the sender PC is a deoptimization point, get the original
! // PC. For MethodHandle call site the unextended_sp is stored in
! // saved_fp.
! if (senderNm.isDeoptMhEntry(getPC())) {
! // DEBUG_ONLY(verifyDeoptMhOriginalPc(senderNm, getFP()));
! raw_unextendedSP = getFP();
! }
! else if (senderNm.isDeoptEntry(getPC())) {
! // DEBUG_ONLY(verifyDeoptOriginalPc(senderNm, raw_unextendedSp));
! }
! else if (senderNm.isMethodHandleReturn(getPC())) {
! raw_unextendedSP = getFP();
}
}
}
private Frame senderForInterpreterFrame(X86RegisterMap map) {
--- 315,335 ----
}
//------------------------------------------------------------------------------
// frame::adjust_unextended_sp
private void adjustUnextendedSP() {
! // On x86, sites calling method handle intrinsics and lambda forms are treated
! // as any other call site. Therefore, no special action is needed when we are
! // returning to any of these call sites.
CodeBlob cb = cb();
NMethod senderNm = (cb == null) ? null : cb.asNMethodOrNull();
if (senderNm != null) {
! // If the sender PC is a deoptimization point, get the original PC.
! if (senderNm.isDeoptEntry(getPC()) ||
! senderNm.isDeoptMhEntry(getPC())) {
! // DEBUG_ONLY(verifyDeoptriginalPc(senderNm, raw_unextendedSp));
}
}
}
private Frame senderForInterpreterFrame(X86RegisterMap map) {
agent/src/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File