sharkFrame_zero.hpp revision 1472:c18cbe5936b8
1132624Smarcel/*
2132624Smarcel * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved.
3138215Smarcel * Copyright 2008, 2009 Red Hat, Inc.
4138213Smarcel * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5132624Smarcel *
6132624Smarcel * This code is free software; you can redistribute it and/or modify it
7132624Smarcel * under the terms of the GNU General Public License version 2 only, as
8132624Smarcel * published by the Free Software Foundation.
9132624Smarcel *
10132624Smarcel * This code is distributed in the hope that it will be useful, but WITHOUT
11141911Sobrien * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12141911Sobrien * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13132624Smarcel * version 2 for more details (a copy is included in the LICENSE file that
14132624Smarcel * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 *
24 */
25
26// |  ...               |
27// +--------------------+  ------------------
28// | stack slot n-1     |       low addresses
29// |  ...               |
30// | stack slot 0       |
31// | monitor m-1        |
32// |  ...               |
33// | monitor 0          |
34// | oop_tmp            |
35// | method             |
36// | unextended_sp      |
37// | pc                 |
38// | frame_type         |
39// | next_frame         |      high addresses
40// +--------------------+  ------------------
41// |  ...               |
42
43class SharkFrame : public ZeroFrame {
44  friend class SharkStack;
45
46 private:
47  SharkFrame() : ZeroFrame() {
48    ShouldNotCallThis();
49  }
50
51 protected:
52  enum Layout {
53    pc_off = jf_header_words,
54    unextended_sp_off,
55    method_off,
56    oop_tmp_off,
57    header_words
58  };
59
60 public:
61  address pc() const {
62    return (address) value_of_word(pc_off);
63  }
64
65  intptr_t* unextended_sp() const {
66    return (intptr_t *) value_of_word(unextended_sp_off);
67  }
68
69  methodOop method() const {
70    return (methodOop) value_of_word(method_off);
71  }
72
73 public:
74  void identify_word(int   frame_index,
75                     int   offset,
76                     char* fieldbuf,
77                     char* valuebuf,
78                     int   buflen) const;
79};
80