hotspot/src/share/vm/prims/stackwalk.hpp
author bchristi
Tue, 20 Sep 2016 10:04:55 -0700
changeset 41280 74b314ad1e9a
parent 41095 97cca074c2be
child 43677 5228814c1da2
permissions -rw-r--r--
8165372: StackWalker performance regression following JDK-8147039 Summary: Stack walking can use javaVFrame or vframeStream Reviewed-by: coleenp, mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
     1
/*
40001
f37246e66d2b 8161028: GPL header missing comma after year
bchristi
parents: 38213
diff changeset
     2
 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
     4
 *
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
     7
 * published by the Free Software Foundation.
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
     8
 *
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    13
 * accompanied this code).
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    14
 *
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    18
 *
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    21
 * questions.
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    22
 *
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    23
 */
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    24
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    25
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    26
#ifndef SHARE_VM_PRIMS_STACKWALK_HPP
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    27
#define SHARE_VM_PRIMS_STACKWALK_HPP
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    28
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    29
#include "oops/oop.hpp"
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    30
#include "runtime/vframe.hpp"
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    31
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    32
// BaseFrameStream is an abstract base class for encapsulating the VM-side
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    33
// implementation of the StackWalker API.  There are two concrete subclasses:
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    34
// - JavaFrameStream:
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    35
//     -based on vframeStream; used in most instances
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    36
// - LiveFrameStream:
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    37
//     -based on javaVFrame; used for retrieving locals/monitors/operands for
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    38
//      LiveStackFrame
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    39
class BaseFrameStream : public StackObj {
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    40
private:
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    41
  enum {
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    42
    magic_pos = 0
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    43
  };
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    44
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    45
  JavaThread*           _thread;
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    46
  jlong                 _anchor;
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    47
protected:
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    48
  void fill_stackframe(Handle stackFrame, const methodHandle& method);
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    49
public:
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    50
  BaseFrameStream(JavaThread* thread) : _thread(thread), _anchor(0L) {}
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    51
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    52
  virtual void    next()=0;
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    53
  virtual bool    at_end()=0;
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    54
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    55
  virtual Method* method()=0;
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    56
  virtual int     bci()=0;
38213
2f32787e31b1 8147039: Incorrect locals and operands in compiled frames
bchristi
parents: 37438
diff changeset
    57
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    58
  virtual void    fill_frame(int index, objArrayHandle  frames_array,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    59
                             const methodHandle& method, TRAPS)=0;
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    60
37438
873c4aea8d1b 8153123: Streamline StackWalker code
bchristi
parents: 34253
diff changeset
    61
  void setup_magic_on_entry(objArrayHandle frames_array);
873c4aea8d1b 8153123: Streamline StackWalker code
bchristi
parents: 34253
diff changeset
    62
  bool check_magic(objArrayHandle frames_array);
873c4aea8d1b 8153123: Streamline StackWalker code
bchristi
parents: 34253
diff changeset
    63
  bool cleanup_magic_on_exit(objArrayHandle frames_array);
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    64
37438
873c4aea8d1b 8153123: Streamline StackWalker code
bchristi
parents: 34253
diff changeset
    65
  bool is_valid_in(Thread* thread, objArrayHandle frames_array) {
873c4aea8d1b 8153123: Streamline StackWalker code
bchristi
parents: 34253
diff changeset
    66
    return (_thread == thread && check_magic(frames_array));
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    67
  }
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    68
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    69
  jlong address_value() {
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    70
    return (jlong) castable_address(this);
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    71
  }
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
    72
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    73
  static BaseFrameStream* from_current(JavaThread* thread, jlong magic, objArrayHandle frames_array);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    74
};
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    75
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    76
class JavaFrameStream : public BaseFrameStream {
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    77
private:
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    78
  vframeStream          _vfst;
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    79
  bool                  _need_method_info;
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    80
public:
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    81
  JavaFrameStream(JavaThread* thread, int mode);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    82
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    83
  void next()      { _vfst.next();}
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    84
  bool at_end()    { return _vfst.at_end(); }
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    85
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    86
  Method* method() { return _vfst.method(); }
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    87
  int bci()        { return _vfst.bci(); }
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    88
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    89
  void fill_frame(int index, objArrayHandle  frames_array,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    90
                  const methodHandle& method, TRAPS);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    91
};
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    92
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    93
class LiveFrameStream : public BaseFrameStream {
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    94
private:
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    95
  javaVFrame*           _jvf;
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    96
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    97
  void fill_live_stackframe(Handle stackFrame, const methodHandle& method, TRAPS);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    98
  static oop create_primitive_value_instance(StackValueCollection* values,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
    99
                                             int i, TRAPS);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   100
  static objArrayHandle monitors_to_object_array(GrowableArray<MonitorInfo*>* monitors,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   101
                                                 TRAPS);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   102
  static objArrayHandle values_to_object_array(StackValueCollection* values, TRAPS);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   103
public:
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   104
  LiveFrameStream(JavaThread* thread, RegisterMap* rm) : BaseFrameStream(thread) {
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   105
    _jvf = thread->last_java_vframe(rm);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   106
  }
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   107
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   108
  void next()      { _jvf = _jvf->java_sender(); }
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   109
  bool at_end()    { return _jvf == NULL; }
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   110
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   111
  Method* method() { return _jvf->method(); }
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   112
  int bci()        { return _jvf->bci(); }
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   113
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   114
  void fill_frame(int index, objArrayHandle  frames_array,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   115
                  const methodHandle& method, TRAPS);
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   116
};
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   117
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   118
class StackWalk : public AllStatic {
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   119
private:
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   120
  static int fill_in_frames(jlong mode, BaseFrameStream& stream,
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   121
                            int max_nframes, int start_index,
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   122
                            objArrayHandle frames_array,
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   123
                            int& end_index, TRAPS);
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   124
41095
97cca074c2be 8157464: Disallow StackWalker.getCallerClass() be called by caller-sensitive method
mchung
parents: 40001
diff changeset
   125
  static inline bool get_caller_class(int mode) {
97cca074c2be 8157464: Disallow StackWalker.getCallerClass() be called by caller-sensitive method
mchung
parents: 40001
diff changeset
   126
    return (mode & JVM_STACKWALK_GET_CALLER_CLASS) != 0;
97cca074c2be 8157464: Disallow StackWalker.getCallerClass() be called by caller-sensitive method
mchung
parents: 40001
diff changeset
   127
  }
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   128
  static inline bool skip_hidden_frames(int mode) {
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   129
    return (mode & JVM_STACKWALK_SHOW_HIDDEN_FRAMES) == 0;
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   130
  }
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   131
  static inline bool live_frame_info(int mode) {
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   132
    return (mode & JVM_STACKWALK_FILL_LIVE_STACK_FRAMES) != 0;
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   133
  }
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   134
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   135
public:
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   136
  static inline bool need_method_info(int mode) {
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   137
    return (mode & JVM_STACKWALK_FILL_CLASS_REFS_ONLY) == 0;
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   138
  }
37438
873c4aea8d1b 8153123: Streamline StackWalker code
bchristi
parents: 34253
diff changeset
   139
  static inline bool use_frames_array(int mode) {
873c4aea8d1b 8153123: Streamline StackWalker code
bchristi
parents: 34253
diff changeset
   140
    return (mode & JVM_STACKWALK_FILL_CLASS_REFS_ONLY) == 0;
873c4aea8d1b 8153123: Streamline StackWalker code
bchristi
parents: 34253
diff changeset
   141
  }
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   142
  static oop walk(Handle stackStream, jlong mode,
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   143
                  int skip_frames, int frame_count, int start_index,
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   144
                  objArrayHandle frames_array,
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   145
                  TRAPS);
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   146
41280
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   147
  static oop fetchFirstBatch(BaseFrameStream& stream, Handle stackStream,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   148
                             jlong mode, int skip_frames, int frame_count,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   149
                             int start_index, objArrayHandle frames_array, TRAPS);
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   150
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   151
  static jint fetchNextBatch(Handle stackStream, jlong mode, jlong magic,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   152
                             int frame_count, int start_index,
74b314ad1e9a 8165372: StackWalker performance regression following JDK-8147039
bchristi
parents: 41095
diff changeset
   153
                             objArrayHandle frames_array, TRAPS);
34253
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   154
};
ba3946143842 8140450: Implement JEP 259: Stack-Walking API
mchung
parents:
diff changeset
   155
#endif // SHARE_VM_PRIMS_STACKWALK_HPP