src/cpu/x86/vm/frame_x86.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8004128_2 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/frame_x86.hpp

Print this page




  23  */
  24 
  25 #ifndef CPU_X86_VM_FRAME_X86_HPP
  26 #define CPU_X86_VM_FRAME_X86_HPP
  27 
  28 #include "runtime/synchronizer.hpp"
  29 #include "utilities/top.hpp"
  30 
  31 // A frame represents a physical stack frame (an activation).  Frames can be
  32 // C or Java frames, and the Java frames can be interpreted or compiled.
  33 // In contrast, vframes represent source-level activations, so that one physical frame
  34 // can correspond to multiple source level frames because of inlining.
  35 // A frame is comprised of {pc, fp, sp}
  36 // ------------------------------ Asm interpreter ----------------------------------------
  37 // Layout of asm interpreter frame:
  38 //    [expression stack      ] * <- sp
  39 //    [monitors              ]   \
  40 //     ...                        | monitor block size
  41 //    [monitors              ]   /
  42 //    [monitor block size    ]
  43 //    [byte code index/pointr]                   = bcx()                bcx_offset
  44 //    [pointer to locals     ]                   = locals()             locals_offset
  45 //    [constant pool cache   ]                   = cache()              cache_offset
  46 //    [methodData            ]                   = mdp()                mdx_offset
  47 //    [Method*               ]                   = method()             method_offset
  48 //    [last sp               ]                   = last_sp()            last_sp_offset
  49 //    [old stack pointer     ]                     (sender_sp)          sender_sp_offset
  50 //    [old frame pointer     ]   <- fp           = link()
  51 //    [return pc             ]
  52 //    [oop temp              ]                     (only for native calls)
  53 //    [locals and parameters ]
  54 //                               <- sender sp
  55 // ------------------------------ Asm interpreter ----------------------------------------
  56 
  57 // ------------------------------ C++ interpreter ----------------------------------------
  58 //
  59 // Layout of C++ interpreter frame: (While executing in BytecodeInterpreter::run)
  60 //
  61 //                             <- SP (current esp/rsp)
  62 //    [local variables         ] BytecodeInterpreter::run local variables
  63 //    ...                        BytecodeInterpreter::run local variables


  94 
  95  public:
  96   enum {
  97     pc_return_offset                                 =  0,
  98     // All frames
  99     link_offset                                      =  0,
 100     return_addr_offset                               =  1,
 101     // non-interpreter frames
 102     sender_sp_offset                                 =  2,
 103 
 104 #ifndef CC_INTERP
 105 
 106     // Interpreter frames
 107     interpreter_frame_result_handler_offset          =  3, // for native calls only
 108     interpreter_frame_oop_temp_offset                =  2, // for native calls only
 109 
 110     interpreter_frame_sender_sp_offset               = -1,
 111     // outgoing sp before a call to an invoked method
 112     interpreter_frame_last_sp_offset                 = interpreter_frame_sender_sp_offset - 1,
 113     interpreter_frame_method_offset                  = interpreter_frame_last_sp_offset - 1,
 114     interpreter_frame_mdx_offset                     = interpreter_frame_method_offset - 1,
 115     interpreter_frame_cache_offset                   = interpreter_frame_mdx_offset - 1,
 116     interpreter_frame_locals_offset                  = interpreter_frame_cache_offset - 1,
 117     interpreter_frame_bcx_offset                     = interpreter_frame_locals_offset - 1,
 118     interpreter_frame_initial_sp_offset              = interpreter_frame_bcx_offset - 1,
 119 
 120     interpreter_frame_monitor_block_top_offset       = interpreter_frame_initial_sp_offset,
 121     interpreter_frame_monitor_block_bottom_offset    = interpreter_frame_initial_sp_offset,
 122 
 123 #endif // CC_INTERP
 124 
 125     // Entry frames
 126 #ifdef AMD64
 127 #ifdef _WIN64
 128     entry_frame_after_call_words                     =  28,
 129     entry_frame_call_wrapper_offset                  =  2,
 130 
 131     arg_reg_save_area_bytes                          = 32, // Register argument save area
 132 #else
 133     entry_frame_after_call_words                     = 13,
 134     entry_frame_call_wrapper_offset                  = -6,
 135 
 136     arg_reg_save_area_bytes                          =  0,
 137 #endif // _WIN64
 138 #else




  23  */
  24 
  25 #ifndef CPU_X86_VM_FRAME_X86_HPP
  26 #define CPU_X86_VM_FRAME_X86_HPP
  27 
  28 #include "runtime/synchronizer.hpp"
  29 #include "utilities/top.hpp"
  30 
  31 // A frame represents a physical stack frame (an activation).  Frames can be
  32 // C or Java frames, and the Java frames can be interpreted or compiled.
  33 // In contrast, vframes represent source-level activations, so that one physical frame
  34 // can correspond to multiple source level frames because of inlining.
  35 // A frame is comprised of {pc, fp, sp}
  36 // ------------------------------ Asm interpreter ----------------------------------------
  37 // Layout of asm interpreter frame:
  38 //    [expression stack      ] * <- sp
  39 //    [monitors              ]   \
  40 //     ...                        | monitor block size
  41 //    [monitors              ]   /
  42 //    [monitor block size    ]
  43 //    [byte code pointer     ]                   = bcp()                bcp_offset
  44 //    [pointer to locals     ]                   = locals()             locals_offset
  45 //    [constant pool cache   ]                   = cache()              cache_offset
  46 //    [methodData            ]                   = mdp()                mdx_offset
  47 //    [Method*               ]                   = method()             method_offset
  48 //    [last sp               ]                   = last_sp()            last_sp_offset
  49 //    [old stack pointer     ]                     (sender_sp)          sender_sp_offset
  50 //    [old frame pointer     ]   <- fp           = link()
  51 //    [return pc             ]
  52 //    [oop temp              ]                     (only for native calls)
  53 //    [locals and parameters ]
  54 //                               <- sender sp
  55 // ------------------------------ Asm interpreter ----------------------------------------
  56 
  57 // ------------------------------ C++ interpreter ----------------------------------------
  58 //
  59 // Layout of C++ interpreter frame: (While executing in BytecodeInterpreter::run)
  60 //
  61 //                             <- SP (current esp/rsp)
  62 //    [local variables         ] BytecodeInterpreter::run local variables
  63 //    ...                        BytecodeInterpreter::run local variables


  94 
  95  public:
  96   enum {
  97     pc_return_offset                                 =  0,
  98     // All frames
  99     link_offset                                      =  0,
 100     return_addr_offset                               =  1,
 101     // non-interpreter frames
 102     sender_sp_offset                                 =  2,
 103 
 104 #ifndef CC_INTERP
 105 
 106     // Interpreter frames
 107     interpreter_frame_result_handler_offset          =  3, // for native calls only
 108     interpreter_frame_oop_temp_offset                =  2, // for native calls only
 109 
 110     interpreter_frame_sender_sp_offset               = -1,
 111     // outgoing sp before a call to an invoked method
 112     interpreter_frame_last_sp_offset                 = interpreter_frame_sender_sp_offset - 1,
 113     interpreter_frame_method_offset                  = interpreter_frame_last_sp_offset - 1,
 114     interpreter_frame_mdp_offset                     = interpreter_frame_method_offset - 1,
 115     interpreter_frame_cache_offset                   = interpreter_frame_mdp_offset - 1,
 116     interpreter_frame_locals_offset                  = interpreter_frame_cache_offset - 1,
 117     interpreter_frame_bcp_offset                     = interpreter_frame_locals_offset - 1,
 118     interpreter_frame_initial_sp_offset              = interpreter_frame_bcp_offset - 1,
 119 
 120     interpreter_frame_monitor_block_top_offset       = interpreter_frame_initial_sp_offset,
 121     interpreter_frame_monitor_block_bottom_offset    = interpreter_frame_initial_sp_offset,
 122 
 123 #endif // CC_INTERP
 124 
 125     // Entry frames
 126 #ifdef AMD64
 127 #ifdef _WIN64
 128     entry_frame_after_call_words                     =  28,
 129     entry_frame_call_wrapper_offset                  =  2,
 130 
 131     arg_reg_save_area_bytes                          = 32, // Register argument save area
 132 #else
 133     entry_frame_after_call_words                     = 13,
 134     entry_frame_call_wrapper_offset                  = -6,
 135 
 136     arg_reg_save_area_bytes                          =  0,
 137 #endif // _WIN64
 138 #else


src/cpu/x86/vm/frame_x86.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File