annotate src/share/vm/utilities/decoder.hpp @ 8733:9def4075da6d

8008079: G1: Add nextObject routine to CMBitMapRO and replace nextWord Summary: Update the task local finger to the start of the next object when marking aborts, in order to avoid the redundant scanning of all 0's when the marking task restarts, if otherwise updating to the next word. In addition, reuse the routine nextObject() in routine iterate(). Reviewed-by: johnc, ysr Contributed-by: tamao <tao.mao@oracle.com>
author tamao
date Tue, 05 Mar 2013 15:36:56 -0800
parents 3b01d0321dfa
children 38f750491293
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
1 /*
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
4 *
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
7 * published by the Free Software Foundation.
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
8 *
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
13 * accompanied this code).
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
14 *
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
18 *
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
21 * questions.
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
22 *
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
23 */
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
24
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
25
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
26 #ifndef SHARE_VM_UTILITIES_DECODER_HPP
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
27 #define SHARE_VM_UTILITIES_DECODER_HPP
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
28
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
29 #include "memory/allocation.hpp"
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
30 #include "runtime/mutex.hpp"
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
31
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 4917
diff changeset
32 class AbstractDecoder : public CHeapObj<mtInternal> {
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
33 public:
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
34 // status code for decoding native C frame
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
35 enum decoder_status {
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
36 not_available = -10, // real decoder is not available
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
37 no_error = 0, // successfully decoded frames
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
38 out_of_memory, // out of memory
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
39 file_invalid, // invalid elf file
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
40 file_not_found, // could not found symbol file (on windows), such as jvm.pdb or jvm.map
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
41 helper_not_found, // could not load dbghelp.dll (Windows only)
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
42 helper_func_error, // decoding functions not found (Windows only)
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
43 helper_init_error // SymInitialize failed (Windows only)
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
44 };
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
45
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
46 // decode an pc address to corresponding function name and an offset from the beginning of
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
47 // the function
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
48 virtual bool decode(address pc, char* buf, int buflen, int* offset,
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
49 const char* modulepath = NULL) = 0;
6258
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 6197
diff changeset
50 virtual bool decode(address pc, char* buf, int buflen, int* offset, const void* base) = 0;
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 6197
diff changeset
51
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
52 // demangle a C++ symbol
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
53 virtual bool demangle(const char* symbol, char* buf, int buflen) = 0;
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
54 // if the decoder can decode symbols in vm
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
55 virtual bool can_decode_C_frame_in_vm() const = 0;
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
56
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
57 virtual decoder_status status() const {
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
58 return _decoder_status;
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
59 }
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
60
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
61 virtual bool has_error() const {
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
62 return is_error(_decoder_status);
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
63 }
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
64
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
65 static bool is_error(decoder_status status) {
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
66 return (status > 0);
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
67 }
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
68
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
69 protected:
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
70 decoder_status _decoder_status;
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
71 };
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
72
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
73 // Do nothing decoder
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
74 class NullDecoder : public AbstractDecoder {
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
75 public:
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
76 NullDecoder() {
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
77 _decoder_status = not_available;
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
78 }
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
79
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
80 ~NullDecoder() {};
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
81
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
82 virtual bool decode(address pc, char* buf, int buflen, int* offset,
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
83 const char* modulepath = NULL) {
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
84 return false;
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
85 }
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
86
6258
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 6197
diff changeset
87 virtual bool decode(address pc, char* buf, int buflen, int* offset, const void* base) {
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 6197
diff changeset
88 return false;
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 6197
diff changeset
89 }
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 6197
diff changeset
90
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
91 virtual bool demangle(const char* symbol, char* buf, int buflen) {
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
92 return false;
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
93 }
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
94
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
95 virtual bool can_decode_C_frame_in_vm() const {
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
96 return false;
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
97 }
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
98 };
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
99
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
100
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
101 class Decoder : AllStatic {
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
102 public:
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
103 static bool decode(address pc, char* buf, int buflen, int* offset, const char* modulepath = NULL);
6258
3b01d0321dfa 7186778: MachO decoder implementation for MacOSX
zgu
parents: 6197
diff changeset
104 static bool decode(address pc, char* buf, int buflen, int* offset, const void* base);
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
105 static bool demangle(const char* symbol, char* buf, int buflen);
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
106 static bool can_decode_C_frame_in_vm();
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
107
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
108 // shutdown shared instance
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
109 static void shutdown();
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
110 protected:
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
111 // shared decoder instance, _shared_instance_lock is needed
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
112 static AbstractDecoder* get_shared_instance();
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
113 // a private instance for error handler. Error handler can be
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
114 // triggered almost everywhere, including signal handler, where
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
115 // no lock can be taken. So the shared decoder can not be used
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
116 // in this scenario.
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
117 static AbstractDecoder* get_error_handler_instance();
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
118
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
119 static AbstractDecoder* create_decoder();
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
120 private:
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
121 static AbstractDecoder* _shared_decoder;
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
122 static AbstractDecoder* _error_handler_decoder;
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
123 static NullDecoder _do_nothing_decoder;
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
124
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
125 protected:
4917
db006a85bf91 7141259: Native stack is missing in hs_err
zgu
parents: 4803
diff changeset
126 static Mutex* _shared_decoder_lock;
2022
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
127 };
2d4762ec74af 7003748: Decode C stack frames when symbols are presented (PhoneHome project)
zgu
parents:
diff changeset
128
4803
d7e3846464d0 7071311: Decoder enhancement
zgu
parents: 3960
diff changeset
129 #endif // SHARE_VM_UTILITIES_DECODER_HPP