< prev index next >

src/hotspot/share/prims/stackwalk.cpp

Print this page




  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/javaClasses.hpp"
  27 #include "classfile/javaClasses.inline.hpp"
  28 #include "classfile/vmSymbols.hpp"
  29 #include "logging/log.hpp"
  30 #include "logging/logStream.hpp"
  31 #include "memory/oopFactory.hpp"
  32 #include "oops/oop.inline.hpp"
  33 #include "oops/objArrayOop.inline.hpp"
  34 #include "prims/stackwalk.hpp"
  35 #include "runtime/globals.hpp"
  36 #include "runtime/handles.inline.hpp"
  37 #include "runtime/javaCalls.hpp"
  38 #include "runtime/vframe.hpp"
  39 #include "utilities/globalDefinitions.hpp"
  40 
  41 // setup and cleanup actions
  42 void BaseFrameStream::setup_magic_on_entry(objArrayHandle frames_array) {
  43   frames_array->obj_at_put(magic_pos, _thread->threadObj());
  44   _anchor = address_value();
  45   assert(check_magic(frames_array), "invalid magic");
  46 }
  47 
  48 bool BaseFrameStream::check_magic(objArrayHandle frames_array) {
  49   oop   m1 = frames_array->obj_at(magic_pos);
  50   jlong m2 = _anchor;
  51   if (m1 == _thread->threadObj() && m2 == address_value())  return true;
  52   return false;
  53 }
  54 
  55 bool BaseFrameStream::cleanup_magic_on_exit(objArrayHandle frames_array) {
  56   bool ok = check_magic(frames_array);
  57   frames_array->obj_at_put(magic_pos, NULL);
  58   _anchor = 0L;
  59   return ok;
  60 }
  61 
  62 JavaFrameStream::JavaFrameStream(JavaThread* thread, int mode)
  63   : BaseFrameStream(thread), _vfst(thread) {
  64   _need_method_info = StackWalk::need_method_info(mode);
  65 }


  66 
  67 // Returns the BaseFrameStream for the current stack being traversed.
  68 //
  69 // Parameters:
  70 //  thread         Current Java thread.
  71 //  magic          Magic value used for each stack walking
  72 //  frames_array   User-supplied buffers.  The 0th element is reserved
  73 //                 for this BaseFrameStream to use
  74 //
  75 BaseFrameStream* BaseFrameStream::from_current(JavaThread* thread, jlong magic,
  76                                                objArrayHandle frames_array)
  77 {
  78   assert(thread != NULL && thread->is_Java_thread(), "");
  79   oop m1 = frames_array->obj_at(magic_pos);
  80   if (m1 != thread->threadObj())      return NULL;
  81   if (magic == 0L)                    return NULL;
  82   BaseFrameStream* stream = (BaseFrameStream*) (intptr_t) magic;
  83   if (!stream->is_valid_in(thread, frames_array))   return NULL;
  84   return stream;
  85 }




  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/javaClasses.hpp"
  27 #include "classfile/javaClasses.inline.hpp"
  28 #include "classfile/vmSymbols.hpp"
  29 #include "logging/log.hpp"
  30 #include "logging/logStream.hpp"
  31 #include "memory/oopFactory.hpp"
  32 #include "oops/oop.inline.hpp"
  33 #include "oops/objArrayOop.inline.hpp"
  34 #include "prims/stackwalk.hpp"
  35 #include "runtime/globals.hpp"
  36 #include "runtime/handles.inline.hpp"
  37 #include "runtime/javaCalls.hpp"
  38 #include "runtime/vframe.inline.hpp"
  39 #include "utilities/globalDefinitions.hpp"
  40 
  41 // setup and cleanup actions
  42 void BaseFrameStream::setup_magic_on_entry(objArrayHandle frames_array) {
  43   frames_array->obj_at_put(magic_pos, _thread->threadObj());
  44   _anchor = address_value();
  45   assert(check_magic(frames_array), "invalid magic");
  46 }
  47 
  48 bool BaseFrameStream::check_magic(objArrayHandle frames_array) {
  49   oop   m1 = frames_array->obj_at(magic_pos);
  50   jlong m2 = _anchor;
  51   if (m1 == _thread->threadObj() && m2 == address_value())  return true;
  52   return false;
  53 }
  54 
  55 bool BaseFrameStream::cleanup_magic_on_exit(objArrayHandle frames_array) {
  56   bool ok = check_magic(frames_array);
  57   frames_array->obj_at_put(magic_pos, NULL);
  58   _anchor = 0L;
  59   return ok;
  60 }
  61 
  62 JavaFrameStream::JavaFrameStream(JavaThread* thread, int mode)
  63   : BaseFrameStream(thread), _vfst(thread) {
  64   _need_method_info = StackWalk::need_method_info(mode);
  65 }
  66 
  67 void JavaFrameStream::next() { _vfst.next();}
  68 
  69 // Returns the BaseFrameStream for the current stack being traversed.
  70 //
  71 // Parameters:
  72 //  thread         Current Java thread.
  73 //  magic          Magic value used for each stack walking
  74 //  frames_array   User-supplied buffers.  The 0th element is reserved
  75 //                 for this BaseFrameStream to use
  76 //
  77 BaseFrameStream* BaseFrameStream::from_current(JavaThread* thread, jlong magic,
  78                                                objArrayHandle frames_array)
  79 {
  80   assert(thread != NULL && thread->is_Java_thread(), "");
  81   oop m1 = frames_array->obj_at(magic_pos);
  82   if (m1 != thread->threadObj())      return NULL;
  83   if (magic == 0L)                    return NULL;
  84   BaseFrameStream* stream = (BaseFrameStream*) (intptr_t) magic;
  85   if (!stream->is_valid_in(thread, frames_array))   return NULL;
  86   return stream;
  87 }


< prev index next >