< prev index next >

src/hotspot/cpu/x86/frame_x86.hpp

Print this page

        

@@ -114,11 +114,11 @@
   // we need to know that value. However in order to compute the address
   // of the return address we need the real "raw" sp. Since sparc already
   // uses sp() to mean "raw" sp and unextended_sp() to mean the caller's
   // original sp we use that convention.
 
-  intptr_t*     _unextended_sp;
+  intptr_t* _unextended_sp;
   void adjust_unextended_sp() NOT_DEBUG_RETURN;
 
   intptr_t* ptr_at_addr(int offset) const {
     return (intptr_t*) addr_at(offset);
   }

@@ -126,32 +126,48 @@
 #ifdef ASSERT
   // Used in frame::sender_for_{interpreter,compiled}_frame
   static void verify_deopt_original_pc(CompiledMethod* nm, intptr_t* unextended_sp);
 #endif
 
+  const ImmutableOopMap* get_oop_map() const;
+
  public:
   // Constructors
 
   frame(intptr_t* sp, intptr_t* fp, address pc);
 
   frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc);
 
+  frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb);
+
+  frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map);
+
+  frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc, CodeBlob* cb, const ImmutableOopMap* oop_map, bool dummy); // used for fast frame construction by continuations
+
+  frame(int sp, int ref_sp, intptr_t fp, address pc, CodeBlob* cb, bool deopt); // for continuation frames
+
   frame(intptr_t* sp, intptr_t* fp);
 
   void init(intptr_t* sp, intptr_t* fp, address pc);
+  void setup(address pc);
 
   // accessors for the instance variables
   // Note: not necessarily the real 'frame pointer' (see real_fp)
   intptr_t*   fp() const { return _fp; }
+  intptr_t**  fp_addr() { return &_fp; } // for use in continuations freezing / thawing
+  void set_fp(intptr_t* newfp) { _fp = newfp; }
 
   inline address* sender_pc_addr() const;
 
   // expression stack tos if we are nested in a java call
   intptr_t* interpreter_frame_last_sp() const;
 
   // helper to update a map with callee-saved RBP
-  static void update_map_with_saved_link(RegisterMap* map, intptr_t** link_addr);
+  template <typename RegisterMapT>
+  static void update_map_with_saved_link(RegisterMapT* map, intptr_t** link_addr);
+  template <typename RegisterMapT>
+  static intptr_t** saved_link_address(const RegisterMapT* map);
 
   // deoptimization support
   void interpreter_frame_set_last_sp(intptr_t* sp);
 
   static jint interpreter_frame_expression_stack_direction() { return -1; }
< prev index next >