< prev index next >

src/hotspot/share/prims/stackwalk.hpp

Print this page
*** 61,29 ***
    virtual int     bci()=0;
    virtual oop     cont()=0; // returns the current continuation (even when walking a thread)
  
    virtual const RegisterMap* reg_map()=0;
  
!   virtual void    fill_frame(int index, objArrayHandle  frames_array,
                               const methodHandle& method, TRAPS)=0;
  
    oop continuation() { return _continuation(); }
    void set_continuation(Handle cont);
  
!   void setup_magic_on_entry(objArrayHandle frames_array);
!   bool check_magic(objArrayHandle frames_array);
!   bool cleanup_magic_on_exit(objArrayHandle frames_array);
  
!   bool is_valid_in(Thread* thread, objArrayHandle frames_array) {
      return (_thread == thread && check_magic(frames_array));
    }
  
    jlong address_value() {
      return (jlong) this;
    }
  
!   static BaseFrameStream* from_current(JavaThread* thread, jlong magic, objArrayHandle frames_array);
  };
  
  class JavaFrameStream : public BaseFrameStream {
  private:
    vframeStream          _vfst;
--- 61,29 ---
    virtual int     bci()=0;
    virtual oop     cont()=0; // returns the current continuation (even when walking a thread)
  
    virtual const RegisterMap* reg_map()=0;
  
!   virtual void    fill_frame(int index, refArrayHandle frames_array,
                               const methodHandle& method, TRAPS)=0;
  
    oop continuation() { return _continuation(); }
    void set_continuation(Handle cont);
  
!   void setup_magic_on_entry(refArrayHandle frames_array);
!   bool check_magic(refArrayHandle frames_array);
!   bool cleanup_magic_on_exit(refArrayHandle frames_array);
  
!   bool is_valid_in(Thread* thread, refArrayHandle frames_array) {
      return (_thread == thread && check_magic(frames_array));
    }
  
    jlong address_value() {
      return (jlong) this;
    }
  
!   static BaseFrameStream* from_current(JavaThread* thread, jlong magic, refArrayHandle frames_array);
  };
  
  class JavaFrameStream : public BaseFrameStream {
  private:
    vframeStream          _vfst;

*** 99,11 ***
  
    Method* method() override { return _vfst.method(); }
    int bci()        override { return _vfst.bci(); }
    oop cont()       override { return _vfst.continuation(); }
  
!   void fill_frame(int index, objArrayHandle  frames_array,
                    const methodHandle& method, TRAPS) override;
  };
  
  class LiveFrameStream : public BaseFrameStream {
  private:
--- 99,11 ---
  
    Method* method() override { return _vfst.method(); }
    int bci()        override { return _vfst.bci(); }
    oop cont()       override { return _vfst.continuation(); }
  
!   void fill_frame(int index, refArrayHandle frames_array,
                    const methodHandle& method, TRAPS) override;
  };
  
  class LiveFrameStream : public BaseFrameStream {
  private:

*** 134,19 ***
  
    Method* method() override { return _jvf->method(); }
    int bci()        override { return _jvf->bci(); }
    oop cont()       override { return continuation() != nullptr ? continuation(): ContinuationEntry::cont_oop_or_null(_cont_entry, _map->thread()); }
  
!   void fill_frame(int index, objArrayHandle  frames_array,
                    const methodHandle& method, TRAPS) override;
  };
  
  class StackWalk : public AllStatic {
  private:
    static int fill_in_frames(jint mode, BaseFrameStream& stream,
                              int buffer_size, int start_index,
!                             objArrayHandle frames_array,
                              int& end_index, TRAPS);
  
    static inline bool skip_hidden_frames(jint mode) {
      return (mode & JVM_STACKWALK_SHOW_HIDDEN_FRAMES) == 0;
    }
--- 134,19 ---
  
    Method* method() override { return _jvf->method(); }
    int bci()        override { return _jvf->bci(); }
    oop cont()       override { return continuation() != nullptr ? continuation(): ContinuationEntry::cont_oop_or_null(_cont_entry, _map->thread()); }
  
!   void fill_frame(int index, refArrayHandle  frames_array,
                    const methodHandle& method, TRAPS) override;
  };
  
  class StackWalk : public AllStatic {
  private:
    static int fill_in_frames(jint mode, BaseFrameStream& stream,
                              int buffer_size, int start_index,
!                             refArrayHandle frames_array,
                              int& end_index, TRAPS);
  
    static inline bool skip_hidden_frames(jint mode) {
      return (mode & JVM_STACKWALK_SHOW_HIDDEN_FRAMES) == 0;
    }

*** 158,20 ***
    static inline bool need_method_info(jint mode) {
      return (mode & JVM_STACKWALK_CLASS_INFO_ONLY) == 0;
    }
  
    static oop walk(Handle stackStream, jint mode, int skip_frames, Handle cont_scope, Handle cont,
!                   int buffer_size, int start_index, objArrayHandle frames_array,
                    TRAPS);
  
    static oop fetchFirstBatch(BaseFrameStream& stream, Handle stackStream,
                               jint mode, int skip_frames, int buffer_size,
!                              int start_index, objArrayHandle frames_array, TRAPS);
  
    static jint fetchNextBatch(Handle stackStream, jint mode, jlong magic,
                               int last_batch_count, int buffer_size, int start_index,
!                              objArrayHandle frames_array, TRAPS);
  
!   static void setContinuation(Handle stackStream, jlong magic, objArrayHandle frames_array,
                                Handle cont, TRAPS);
  };
  #endif // SHARE_PRIMS_STACKWALK_HPP
--- 158,20 ---
    static inline bool need_method_info(jint mode) {
      return (mode & JVM_STACKWALK_CLASS_INFO_ONLY) == 0;
    }
  
    static oop walk(Handle stackStream, jint mode, int skip_frames, Handle cont_scope, Handle cont,
!                   int buffer_size, int start_index, refArrayHandle frames_array,
                    TRAPS);
  
    static oop fetchFirstBatch(BaseFrameStream& stream, Handle stackStream,
                               jint mode, int skip_frames, int buffer_size,
!                              int start_index, refArrayHandle frames_array, TRAPS);
  
    static jint fetchNextBatch(Handle stackStream, jint mode, jlong magic,
                               int last_batch_count, int buffer_size, int start_index,
!                              refArrayHandle frames_array, TRAPS);
  
!   static void setContinuation(Handle stackStream, jlong magic, refArrayHandle frames_array,
                                Handle cont, TRAPS);
  };
  #endif // SHARE_PRIMS_STACKWALK_HPP
< prev index next >