< prev index next >

hotspot/src/share/vm/prims/stackwalk.hpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 27,51 **** #define SHARE_VM_PRIMS_STACKWALK_HPP #include "oops/oop.hpp" #include "runtime/vframe.hpp" ! class StackWalkAnchor : public StackObj { private: enum { magic_pos = 0 }; JavaThread* _thread; ! vframeStream _vfst; jlong _anchor; public: ! StackWalkAnchor(JavaThread* thread) ! : _thread(thread), _vfst(thread), _anchor(0L) {} ! vframeStream& vframe_stream() { return _vfst; } ! JavaThread* thread() { return _thread; } void setup_magic_on_entry(objArrayHandle frames_array); bool check_magic(objArrayHandle frames_array); bool cleanup_magic_on_exit(objArrayHandle frames_array); --- 27,61 ---- #define SHARE_VM_PRIMS_STACKWALK_HPP #include "oops/oop.hpp" #include "runtime/vframe.hpp" ! // ! // JavaFrameStream is used by StackWalker to iterate through Java stack frames ! // on the given JavaThread. ! // ! class JavaFrameStream : public StackObj { private: enum { magic_pos = 0 }; JavaThread* _thread; ! javaVFrame* _jvf; jlong _anchor; public: ! JavaFrameStream(JavaThread* thread, RegisterMap* rm) ! : _thread(thread), _anchor(0L) { ! _jvf = _thread->last_java_vframe(rm); ! } ! ! javaVFrame* java_frame() { return _jvf; } ! void next() { _jvf = _jvf->java_sender(); } ! bool at_end() { return _jvf == NULL; } ! Method* method() { return _jvf->method(); } ! int bci() { return _jvf->bci(); } void setup_magic_on_entry(objArrayHandle frames_array); bool check_magic(objArrayHandle frames_array); bool cleanup_magic_on_exit(objArrayHandle frames_array);
*** 55,70 **** jlong address_value() { return (jlong) castable_address(this); } ! static StackWalkAnchor* from_current(JavaThread* thread, jlong anchor, objArrayHandle frames_array); }; class StackWalk : public AllStatic { private: ! static int fill_in_frames(jlong mode, vframeStream& vfst, int max_nframes, int start_index, objArrayHandle frames_array, int& end_index, TRAPS); static void fill_stackframe(Handle stackFrame, const methodHandle& method, int bci); --- 65,80 ---- jlong address_value() { return (jlong) castable_address(this); } ! static JavaFrameStream* from_current(JavaThread* thread, jlong anchor, objArrayHandle frames_array); }; class StackWalk : public AllStatic { private: ! static int fill_in_frames(jlong mode, JavaFrameStream& stream, int max_nframes, int start_index, objArrayHandle frames_array, int& end_index, TRAPS); static void fill_stackframe(Handle stackFrame, const methodHandle& method, int bci);
< prev index next >