< prev index next >

src/hotspot/share/runtime/vframe.hpp

Print this page

        

@@ -48,10 +48,12 @@
 //   - externalVFrame
 //     - entryVFrame        ; special frame created when calling Java from C
 
 // - BasicLock
 
+class javaVFrame;
+
 class vframe: public ResourceObj {
  protected:
   frame        _fr;      // Raw frame behind the virtual frame.
   RegisterMap  _reg_map; // Register map for the raw frame (used to handle callee-saved registers).
   JavaThread*  _thread;  // The thread owning the raw frame.

@@ -72,10 +74,11 @@
 
 // ???? Does this need to be a copy?
   frame*             frame_pointer() { return &_fr;       }
   const RegisterMap* register_map() const { return &_reg_map; }
   JavaThread*        thread()       const { return _thread;   }
+  oop                continuation() const { return _reg_map.cont(); }
 
   // Returns the sender vframe
   virtual vframe* sender() const;
 
   // Returns the next javaVFrame on the stack (skipping all other kinds of frame)

@@ -99,10 +102,11 @@
   virtual void print_value() const;
   virtual void print();
 #endif
 };
 
+class MonitorInfo;
 
 class javaVFrame: public vframe {
  public:
   // JVM state
   virtual Method*                      method()         const = 0;

@@ -290,13 +294,15 @@
   int _vframe_id;
 
   // Cached information
   Method* _method;
   int       _bci;
+  Handle   _cont; // the current frame's continuation
 
   // Should VM activations be ignored or not
   bool _stop_at_java_call_stub;
+  Handle _continuation_scope; // stop at bottom of continuation with this scope
 
   bool fill_in_compiled_inlined_sender();
   void fill_from_compiled_frame(int decode_offset);
   void fill_from_compiled_native_frame();
 

@@ -309,16 +315,18 @@
   DEBUG_ONLY(void found_bad_method_frame() const;)
 
  public:
   // Constructor
   inline vframeStreamCommon(JavaThread* thread);
+  inline vframeStreamCommon(RegisterMap reg_map);
 
   // Accessors
   Method* method() const { return _method; }
   int bci() const { return _bci; }
   inline intptr_t* frame_id() const;
   address frame_pc() const { return _frame.pc(); }
+  oop continuation() const { return _cont(); }
 
   CodeBlob*          cb()         const { return _frame.cb();  }
   CompiledMethod*   nm()         const {
       assert( cb() != NULL && cb()->is_compiled(), "usage");
       return (CompiledMethod*) cb();

@@ -348,10 +356,14 @@
 class vframeStream : public vframeStreamCommon {
  public:
   // Constructors
   vframeStream(JavaThread* thread, bool stop_at_java_call_stub = false);
 
+  vframeStream(JavaThread* thread, Handle continuation_scope, bool stop_at_java_call_stub = false);
+
   // top_frame may not be at safepoint, start with sender
   vframeStream(JavaThread* thread, frame top_frame, bool stop_at_java_call_stub = false);
+
+  vframeStream(Handle continuation);
 };
 
 #endif // SHARE_RUNTIME_VFRAME_HPP
< prev index next >