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