src/cpu/x86/vm/frame_x86.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8068945-8u-patched Cdiff src/cpu/x86/vm/frame_x86.hpp

src/cpu/x86/vm/frame_x86.hpp

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

*** 74,96 **** // [struct interpretState ] <-----------------------------------------| // [return pc ] (return to callee of frame manager [1] // [locals and parameters ] // <- sender sp ! // [1] When the c++ interpreter calls a new method it returns to the frame // manager which allocates a new frame on the stack. In that case there // is no real callee of this newly allocated frame. The frame manager is // aware of the additional frame(s) and will pop them as nested calls ! // complete. Howevers tTo make it look good in the debugger the frame // manager actually installs a dummy pc pointing to RecursiveInterpreterActivation // with a fake interpreter_state* parameter to make it easy to debug // nested calls. // Note that contrary to the layout for the assembly interpreter the // expression stack allocated for the C++ interpreter is full sized. // However this is not as bad as it seems as the interpreter frame_manager ! // will truncate the unused space on succesive method calls. // // ------------------------------ C++ interpreter ---------------------------------------- public: enum { --- 74,96 ---- // [struct interpretState ] <-----------------------------------------| // [return pc ] (return to callee of frame manager [1] // [locals and parameters ] // <- sender sp ! // [1] When the C++ interpreter calls a new method it returns to the frame // manager which allocates a new frame on the stack. In that case there // is no real callee of this newly allocated frame. The frame manager is // aware of the additional frame(s) and will pop them as nested calls ! // complete. However, to make it look good in the debugger the frame // manager actually installs a dummy pc pointing to RecursiveInterpreterActivation // with a fake interpreter_state* parameter to make it easy to debug // nested calls. // Note that contrary to the layout for the assembly interpreter the // expression stack allocated for the C++ interpreter is full sized. // However this is not as bad as it seems as the interpreter frame_manager ! // will truncate the unused space on successive method calls. // // ------------------------------ C++ interpreter ---------------------------------------- public: enum {
*** 170,183 **** return (intptr_t*) addr_at(offset); } #ifdef ASSERT // Used in frame::sender_for_{interpreter,compiled}_frame ! static void verify_deopt_original_pc( nmethod* nm, intptr_t* unextended_sp, bool is_method_handle_return = false); ! static void verify_deopt_mh_original_pc(nmethod* nm, intptr_t* unextended_sp) { ! verify_deopt_original_pc(nm, unextended_sp, true); ! } #endif public: // Constructors --- 170,180 ---- return (intptr_t*) addr_at(offset); } #ifdef ASSERT // Used in frame::sender_for_{interpreter,compiled}_frame ! static void verify_deopt_original_pc(nmethod* nm, intptr_t* unextended_sp); #endif public: // Constructors
src/cpu/x86/vm/frame_x86.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File