annotate src/share/vm/prims/jvmtiExport.hpp @ 6972:bd7a7ce2e264

6830717: replay of compilations would help with debugging Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method. Reviewed-by: kvn, twisti, sspitsyn Contributed-by: yumin.qi@oracle.com
author minqi
date Mon, 12 Nov 2012 14:03:53 -0800
parents fb19af007ffc
children db9981fd3124
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
5935
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 3939
diff changeset
2 * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1397
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1397
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1397
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
25 #ifndef SHARE_VM_PRIMS_JVMTIEXPORT_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
26 #define SHARE_VM_PRIMS_JVMTIEXPORT_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
28 #include "jvmtifiles/jvmti.h"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
29 #include "memory/allocation.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
30 #include "memory/iterator.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
31 #include "oops/oop.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
32 #include "oops/oopsHierarchy.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
33 #include "runtime/frame.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
34 #include "runtime/handles.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
35 #include "utilities/globalDefinitions.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
36 #include "utilities/growableArray.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
37
1983
c760f78e0a53 7003125: precompiled.hpp is included when precompiled headers are not used
stefank
parents: 1972
diff changeset
38 // Must be included after jvmti.h.
c760f78e0a53 7003125: precompiled.hpp is included when precompiled headers are not used
stefank
parents: 1972
diff changeset
39 #include "code/jvmticmlr.h"
c760f78e0a53 7003125: precompiled.hpp is included when precompiled headers are not used
stefank
parents: 1972
diff changeset
40
0
a61af66fc99e Initial load
duke
parents:
diff changeset
41 // Forward declarations
a61af66fc99e Initial load
duke
parents:
diff changeset
42
a61af66fc99e Initial load
duke
parents:
diff changeset
43 class JvmtiEventControllerPrivate;
a61af66fc99e Initial load
duke
parents:
diff changeset
44 class JvmtiManageCapabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
45 class JvmtiEnv;
a61af66fc99e Initial load
duke
parents:
diff changeset
46 class JvmtiThreadState;
a61af66fc99e Initial load
duke
parents:
diff changeset
47 class AttachOperation;
a61af66fc99e Initial load
duke
parents:
diff changeset
48
a61af66fc99e Initial load
duke
parents:
diff changeset
49 #define JVMTI_SUPPORT_FLAG(key) \
a61af66fc99e Initial load
duke
parents:
diff changeset
50 private: \
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
51 static bool _##key; \
0
a61af66fc99e Initial load
duke
parents:
diff changeset
52 public: \
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
53 inline static void set_##key(bool on) { \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
54 JVMTI_ONLY(_##key = (on != 0)); \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
55 NOT_JVMTI(report_unsupported(on)); \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
56 } \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
57 inline static bool key() { \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
58 JVMTI_ONLY(return _##key); \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
59 NOT_JVMTI(return false); \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
60 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
61
a61af66fc99e Initial load
duke
parents:
diff changeset
62
a61af66fc99e Initial load
duke
parents:
diff changeset
63 // This class contains the JVMTI interface for the rest of hotspot.
a61af66fc99e Initial load
duke
parents:
diff changeset
64 //
a61af66fc99e Initial load
duke
parents:
diff changeset
65 class JvmtiExport : public AllStatic {
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 2301
diff changeset
66 friend class VMStructs;
6972
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6854
diff changeset
67 friend class CompileReplay;
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6854
diff changeset
68
0
a61af66fc99e Initial load
duke
parents:
diff changeset
69 private:
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
70
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
71 #if INCLUDE_JVMTI
0
a61af66fc99e Initial load
duke
parents:
diff changeset
72 static int _field_access_count;
a61af66fc99e Initial load
duke
parents:
diff changeset
73 static int _field_modification_count;
a61af66fc99e Initial load
duke
parents:
diff changeset
74
a61af66fc99e Initial load
duke
parents:
diff changeset
75 static bool _can_access_local_variables;
a61af66fc99e Initial load
duke
parents:
diff changeset
76 static bool _can_hotswap_or_post_breakpoint;
a61af66fc99e Initial load
duke
parents:
diff changeset
77 static bool _can_modify_any_class;
a61af66fc99e Initial load
duke
parents:
diff changeset
78 static bool _can_walk_any_space;
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
79 #endif // INCLUDE_JVMTI
0
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 JVMTI_SUPPORT_FLAG(can_get_source_debug_extension)
a61af66fc99e Initial load
duke
parents:
diff changeset
82 JVMTI_SUPPORT_FLAG(can_maintain_original_method_order)
a61af66fc99e Initial load
duke
parents:
diff changeset
83 JVMTI_SUPPORT_FLAG(can_post_interpreter_events)
1213
6deeaebad47a 6902182: 4/4 Starting with jdwp agent should not incur performance penalty
dcubed
parents: 1121
diff changeset
84 JVMTI_SUPPORT_FLAG(can_post_on_exceptions)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
85 JVMTI_SUPPORT_FLAG(can_post_breakpoint)
a61af66fc99e Initial load
duke
parents:
diff changeset
86 JVMTI_SUPPORT_FLAG(can_post_field_access)
a61af66fc99e Initial load
duke
parents:
diff changeset
87 JVMTI_SUPPORT_FLAG(can_post_field_modification)
a61af66fc99e Initial load
duke
parents:
diff changeset
88 JVMTI_SUPPORT_FLAG(can_post_method_entry)
a61af66fc99e Initial load
duke
parents:
diff changeset
89 JVMTI_SUPPORT_FLAG(can_post_method_exit)
a61af66fc99e Initial load
duke
parents:
diff changeset
90 JVMTI_SUPPORT_FLAG(can_pop_frame)
a61af66fc99e Initial load
duke
parents:
diff changeset
91 JVMTI_SUPPORT_FLAG(can_force_early_return)
a61af66fc99e Initial load
duke
parents:
diff changeset
92
a61af66fc99e Initial load
duke
parents:
diff changeset
93 friend class JvmtiEventControllerPrivate; // should only modify these flags
a61af66fc99e Initial load
duke
parents:
diff changeset
94 JVMTI_SUPPORT_FLAG(should_post_single_step)
a61af66fc99e Initial load
duke
parents:
diff changeset
95 JVMTI_SUPPORT_FLAG(should_post_field_access)
a61af66fc99e Initial load
duke
parents:
diff changeset
96 JVMTI_SUPPORT_FLAG(should_post_field_modification)
a61af66fc99e Initial load
duke
parents:
diff changeset
97 JVMTI_SUPPORT_FLAG(should_post_class_load)
a61af66fc99e Initial load
duke
parents:
diff changeset
98 JVMTI_SUPPORT_FLAG(should_post_class_prepare)
a61af66fc99e Initial load
duke
parents:
diff changeset
99 JVMTI_SUPPORT_FLAG(should_post_class_unload)
a61af66fc99e Initial load
duke
parents:
diff changeset
100 JVMTI_SUPPORT_FLAG(should_post_native_method_bind)
a61af66fc99e Initial load
duke
parents:
diff changeset
101 JVMTI_SUPPORT_FLAG(should_post_compiled_method_load)
a61af66fc99e Initial load
duke
parents:
diff changeset
102 JVMTI_SUPPORT_FLAG(should_post_compiled_method_unload)
a61af66fc99e Initial load
duke
parents:
diff changeset
103 JVMTI_SUPPORT_FLAG(should_post_dynamic_code_generated)
a61af66fc99e Initial load
duke
parents:
diff changeset
104 JVMTI_SUPPORT_FLAG(should_post_monitor_contended_enter)
a61af66fc99e Initial load
duke
parents:
diff changeset
105 JVMTI_SUPPORT_FLAG(should_post_monitor_contended_entered)
a61af66fc99e Initial load
duke
parents:
diff changeset
106 JVMTI_SUPPORT_FLAG(should_post_monitor_wait)
a61af66fc99e Initial load
duke
parents:
diff changeset
107 JVMTI_SUPPORT_FLAG(should_post_monitor_waited)
a61af66fc99e Initial load
duke
parents:
diff changeset
108 JVMTI_SUPPORT_FLAG(should_post_data_dump)
a61af66fc99e Initial load
duke
parents:
diff changeset
109 JVMTI_SUPPORT_FLAG(should_post_garbage_collection_start)
a61af66fc99e Initial load
duke
parents:
diff changeset
110 JVMTI_SUPPORT_FLAG(should_post_garbage_collection_finish)
1213
6deeaebad47a 6902182: 4/4 Starting with jdwp agent should not incur performance penalty
dcubed
parents: 1121
diff changeset
111 JVMTI_SUPPORT_FLAG(should_post_on_exceptions)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
112
a61af66fc99e Initial load
duke
parents:
diff changeset
113 // ------ the below maybe don't have to be (but are for now)
a61af66fc99e Initial load
duke
parents:
diff changeset
114 // fixed conditions here ------------
a61af66fc99e Initial load
duke
parents:
diff changeset
115 // any events can be enabled
a61af66fc99e Initial load
duke
parents:
diff changeset
116 JVMTI_SUPPORT_FLAG(should_post_thread_life)
a61af66fc99e Initial load
duke
parents:
diff changeset
117 JVMTI_SUPPORT_FLAG(should_post_object_free)
a61af66fc99e Initial load
duke
parents:
diff changeset
118 JVMTI_SUPPORT_FLAG(should_post_resource_exhausted)
a61af66fc99e Initial load
duke
parents:
diff changeset
119
a61af66fc99e Initial load
duke
parents:
diff changeset
120 // we are holding objects on the heap - need to talk to GC - e.g.
a61af66fc99e Initial load
duke
parents:
diff changeset
121 // breakpoint info
a61af66fc99e Initial load
duke
parents:
diff changeset
122 JVMTI_SUPPORT_FLAG(should_clean_up_heap_objects)
a61af66fc99e Initial load
duke
parents:
diff changeset
123 JVMTI_SUPPORT_FLAG(should_post_vm_object_alloc)
a61af66fc99e Initial load
duke
parents:
diff changeset
124
a61af66fc99e Initial load
duke
parents:
diff changeset
125 // If flag cannot be implemented, give an error if on=true
a61af66fc99e Initial load
duke
parents:
diff changeset
126 static void report_unsupported(bool on);
a61af66fc99e Initial load
duke
parents:
diff changeset
127
a61af66fc99e Initial load
duke
parents:
diff changeset
128 // these should only be called by the friend class
a61af66fc99e Initial load
duke
parents:
diff changeset
129 friend class JvmtiManageCapabilities;
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
130 inline static void set_can_modify_any_class(bool on) {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
131 JVMTI_ONLY(_can_modify_any_class = (on != 0);)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
132 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
133 inline static void set_can_access_local_variables(bool on) {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
134 JVMTI_ONLY(_can_access_local_variables = (on != 0);)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
135 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
136 inline static void set_can_hotswap_or_post_breakpoint(bool on) {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
137 JVMTI_ONLY(_can_hotswap_or_post_breakpoint = (on != 0);)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
138 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
139 inline static void set_can_walk_any_space(bool on) {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
140 JVMTI_ONLY(_can_walk_any_space = (on != 0);)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
141 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
142
a61af66fc99e Initial load
duke
parents:
diff changeset
143 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
144 JVMTI_VERSION_MASK = 0x70000000,
a61af66fc99e Initial load
duke
parents:
diff changeset
145 JVMTI_VERSION_VALUE = 0x30000000,
a61af66fc99e Initial load
duke
parents:
diff changeset
146 JVMDI_VERSION_VALUE = 0x20000000
a61af66fc99e Initial load
duke
parents:
diff changeset
147 };
a61af66fc99e Initial load
duke
parents:
diff changeset
148
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
149 static void post_field_modification(JavaThread *thread, Method* method, address location,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
150 KlassHandle field_klass, Handle object, jfieldID field,
a61af66fc99e Initial load
duke
parents:
diff changeset
151 char sig_type, jvalue *value);
a61af66fc99e Initial load
duke
parents:
diff changeset
152
a61af66fc99e Initial load
duke
parents:
diff changeset
153
a61af66fc99e Initial load
duke
parents:
diff changeset
154 // posts a DynamicCodeGenerated event (internal/private implementation).
a61af66fc99e Initial load
duke
parents:
diff changeset
155 // The public post_dynamic_code_generated* functions make use of the
2301
f91db74a6810 7017640: Fix for 6766644 deadlocks on some NSK tests when running with -Xcomp
kamg
parents: 2195
diff changeset
156 // internal implementation. Also called from JvmtiDeferredEvent::post()
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
157 static void post_dynamic_code_generated_internal(const char *name, const void *code_begin, const void *code_end) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
158
2301
f91db74a6810 7017640: Fix for 6766644 deadlocks on some NSK tests when running with -Xcomp
kamg
parents: 2195
diff changeset
159 private:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
160
a61af66fc99e Initial load
duke
parents:
diff changeset
161 // GenerateEvents support to allow posting of CompiledMethodLoad and
a61af66fc99e Initial load
duke
parents:
diff changeset
162 // DynamicCodeGenerated events for a given environment.
a61af66fc99e Initial load
duke
parents:
diff changeset
163 friend class JvmtiCodeBlobEvents;
a61af66fc99e Initial load
duke
parents:
diff changeset
164
a61af66fc99e Initial load
duke
parents:
diff changeset
165 static void post_compiled_method_load(JvmtiEnv* env, const jmethodID method, const jint length,
a61af66fc99e Initial load
duke
parents:
diff changeset
166 const void *code_begin, const jint map_length,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
167 const jvmtiAddrLocationMap* map) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
168 static void post_dynamic_code_generated(JvmtiEnv* env, const char *name, const void *code_begin,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
169 const void *code_end) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
170
a61af66fc99e Initial load
duke
parents:
diff changeset
171 // The RedefineClasses() API breaks some invariants in the "regular"
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // system. For example, there are sanity checks when GC'ing nmethods
a61af66fc99e Initial load
duke
parents:
diff changeset
173 // that require the containing class to be unloading. However, when a
a61af66fc99e Initial load
duke
parents:
diff changeset
174 // method is redefined, the old method and nmethod can become GC'able
a61af66fc99e Initial load
duke
parents:
diff changeset
175 // without the containing class unloading. The state of becoming
a61af66fc99e Initial load
duke
parents:
diff changeset
176 // GC'able can be asynchronous to the RedefineClasses() call since
a61af66fc99e Initial load
duke
parents:
diff changeset
177 // the old method may still be running and cannot be GC'ed until
a61af66fc99e Initial load
duke
parents:
diff changeset
178 // after all old invocations have finished. Additionally, a method
a61af66fc99e Initial load
duke
parents:
diff changeset
179 // that has not been redefined may have an nmethod that depends on
a61af66fc99e Initial load
duke
parents:
diff changeset
180 // the redefined method. The dependent nmethod will get deopted in
a61af66fc99e Initial load
duke
parents:
diff changeset
181 // this case and may also be GC'able without the containing class
a61af66fc99e Initial load
duke
parents:
diff changeset
182 // being unloaded.
a61af66fc99e Initial load
duke
parents:
diff changeset
183 //
a61af66fc99e Initial load
duke
parents:
diff changeset
184 // This flag indicates whether RedefineClasses() has ever redefined
a61af66fc99e Initial load
duke
parents:
diff changeset
185 // one or more classes during the lifetime of the VM. The flag should
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // only be set by the friend class and can be queried by other sub
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // systems as needed to relax invariant checks.
a61af66fc99e Initial load
duke
parents:
diff changeset
188 static bool _has_redefined_a_class;
a61af66fc99e Initial load
duke
parents:
diff changeset
189 friend class VM_RedefineClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
190 inline static void set_has_redefined_a_class() {
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
191 JVMTI_ONLY(_has_redefined_a_class = true;)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
192 }
a61af66fc99e Initial load
duke
parents:
diff changeset
193 // Flag to indicate if the compiler has recorded all dependencies. When the
a61af66fc99e Initial load
duke
parents:
diff changeset
194 // can_redefine_classes capability is enabled in the OnLoad phase then the compiler
a61af66fc99e Initial load
duke
parents:
diff changeset
195 // records all dependencies from startup. However if the capability is first
a61af66fc99e Initial load
duke
parents:
diff changeset
196 // enabled some time later then the dependencies recorded by the compiler
a61af66fc99e Initial load
duke
parents:
diff changeset
197 // are incomplete. This flag is used by RedefineClasses to know if the
a61af66fc99e Initial load
duke
parents:
diff changeset
198 // dependency information is complete or not.
a61af66fc99e Initial load
duke
parents:
diff changeset
199 static bool _all_dependencies_are_recorded;
a61af66fc99e Initial load
duke
parents:
diff changeset
200
a61af66fc99e Initial load
duke
parents:
diff changeset
201 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
202 inline static bool has_redefined_a_class() {
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
203 JVMTI_ONLY(return _has_redefined_a_class);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
204 NOT_JVMTI(return false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
205 }
a61af66fc99e Initial load
duke
parents:
diff changeset
206
a61af66fc99e Initial load
duke
parents:
diff changeset
207 inline static bool all_dependencies_are_recorded() {
a61af66fc99e Initial load
duke
parents:
diff changeset
208 return _all_dependencies_are_recorded;
a61af66fc99e Initial load
duke
parents:
diff changeset
209 }
a61af66fc99e Initial load
duke
parents:
diff changeset
210
a61af66fc99e Initial load
duke
parents:
diff changeset
211 inline static void set_all_dependencies_are_recorded(bool on) {
a61af66fc99e Initial load
duke
parents:
diff changeset
212 _all_dependencies_are_recorded = (on != 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
213 }
a61af66fc99e Initial load
duke
parents:
diff changeset
214
a61af66fc99e Initial load
duke
parents:
diff changeset
215
a61af66fc99e Initial load
duke
parents:
diff changeset
216 // let JVMTI know that the JVM_OnLoad code is running
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
217 static void enter_onload_phase() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
218
a61af66fc99e Initial load
duke
parents:
diff changeset
219 // let JVMTI know that the VM isn't up yet (and JVM_OnLoad code isn't running)
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
220 static void enter_primordial_phase() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
221
a61af66fc99e Initial load
duke
parents:
diff changeset
222 // let JVMTI know that the VM isn't up yet but JNI is live
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
223 static void enter_start_phase() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
224
a61af66fc99e Initial load
duke
parents:
diff changeset
225 // let JVMTI know that the VM is fully up and running now
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
226 static void enter_live_phase() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
227
a61af66fc99e Initial load
duke
parents:
diff changeset
228 // ------ can_* conditions (below) are set at OnLoad and never changed ------------
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
229 inline static bool can_modify_any_class() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
230 JVMTI_ONLY(return _can_modify_any_class);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
231 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
232 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
233 inline static bool can_access_local_variables() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
234 JVMTI_ONLY(return _can_access_local_variables);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
235 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
236 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
237 inline static bool can_hotswap_or_post_breakpoint() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
238 JVMTI_ONLY(return _can_hotswap_or_post_breakpoint);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
239 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
240 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
241 inline static bool can_walk_any_space() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
242 JVMTI_ONLY(return _can_walk_any_space);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
243 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
244 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
245
a61af66fc99e Initial load
duke
parents:
diff changeset
246 // field access management
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
247 static address get_field_access_count_addr() NOT_JVMTI_RETURN_(0);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
248
a61af66fc99e Initial load
duke
parents:
diff changeset
249 // field modification management
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
250 static address get_field_modification_count_addr() NOT_JVMTI_RETURN_(0);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
251
a61af66fc99e Initial load
duke
parents:
diff changeset
252 // -----------------
a61af66fc99e Initial load
duke
parents:
diff changeset
253
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
254 static bool is_jvmti_version(jint version) {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
255 JVMTI_ONLY(return (version & JVMTI_VERSION_MASK) == JVMTI_VERSION_VALUE);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
256 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
257 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
258 static bool is_jvmdi_version(jint version) {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
259 JVMTI_ONLY(return (version & JVMTI_VERSION_MASK) == JVMDI_VERSION_VALUE);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
260 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
261 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
262 static jint get_jvmti_interface(JavaVM *jvm, void **penv, jint version) NOT_JVMTI_RETURN_(0);
1121
98cd9901c161 6849968: 3/2 JVMTI tests fails on jdk5.0 with hs14
dcubed
parents: 0
diff changeset
263 static void decode_version_values(jint version, int * major, int * minor,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
264 int * micro) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
265
a61af66fc99e Initial load
duke
parents:
diff changeset
266 // single stepping management methods
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
267 static void at_single_stepping_point(JavaThread *thread, Method* method, address location) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
268 static void expose_single_stepping(JavaThread *thread) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
269 static bool hide_single_stepping(JavaThread *thread) NOT_JVMTI_RETURN_(false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
270
a61af66fc99e Initial load
duke
parents:
diff changeset
271 // Methods that notify the debugger that something interesting has happened in the VM.
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
272 static void post_vm_start () NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
273 static void post_vm_initialized () NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
274 static void post_vm_death () NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
275
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
276 static void post_single_step (JavaThread *thread, Method* method, address location) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
277 static void post_raw_breakpoint (JavaThread *thread, Method* method, address location) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
278
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
279 static void post_exception_throw (JavaThread *thread, Method* method, address location, oop exception) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
280 static void notice_unwind_due_to_exception (JavaThread *thread, Method* method, address location, oop exception, bool in_handler_frame) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
281
a61af66fc99e Initial load
duke
parents:
diff changeset
282 static oop jni_GetField_probe (JavaThread *thread, jobject jobj,
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
283 oop obj, Klass* klass, jfieldID fieldID, bool is_static)
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
284 NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
285 static oop jni_GetField_probe_nh (JavaThread *thread, jobject jobj,
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
286 oop obj, Klass* klass, jfieldID fieldID, bool is_static)
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
287 NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
288 static void post_field_access_by_jni (JavaThread *thread, oop obj,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
289 Klass* klass, jfieldID fieldID, bool is_static) NOT_JVMTI_RETURN;
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
290 static void post_field_access (JavaThread *thread, Method* method,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
291 address location, KlassHandle field_klass, Handle object, jfieldID field) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
292 static oop jni_SetField_probe (JavaThread *thread, jobject jobj,
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
293 oop obj, Klass* klass, jfieldID fieldID, bool is_static, char sig_type,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
294 jvalue *value) NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
295 static oop jni_SetField_probe_nh (JavaThread *thread, jobject jobj,
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
296 oop obj, Klass* klass, jfieldID fieldID, bool is_static, char sig_type,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
297 jvalue *value) NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
298 static void post_field_modification_by_jni(JavaThread *thread, oop obj,
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
299 Klass* klass, jfieldID fieldID, bool is_static, char sig_type,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
300 jvalue *value);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
301 static void post_raw_field_modification(JavaThread *thread, Method* method,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
302 address location, KlassHandle field_klass, Handle object, jfieldID field,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
303 char sig_type, jvalue *value) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
304
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
305 static void post_method_entry (JavaThread *thread, Method* method, frame current_frame) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
306 static void post_method_exit (JavaThread *thread, Method* method, frame current_frame) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
307
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
308 static void post_class_load (JavaThread *thread, Klass* klass) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
309 static void post_class_unload (Klass* klass) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
310 static void post_class_prepare (JavaThread *thread, Klass* klass) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
311
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
312 static void post_thread_start (JavaThread *thread) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
313 static void post_thread_end (JavaThread *thread) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
314
a61af66fc99e Initial load
duke
parents:
diff changeset
315 // Support for java.lang.instrument agent loading.
a61af66fc99e Initial load
duke
parents:
diff changeset
316 static bool _should_post_class_file_load_hook;
a61af66fc99e Initial load
duke
parents:
diff changeset
317 inline static void set_should_post_class_file_load_hook(bool on) { _should_post_class_file_load_hook = on; }
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
318 inline static bool should_post_class_file_load_hook() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
319 JVMTI_ONLY(return _should_post_class_file_load_hook);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
320 NOT_JVMTI(return false;)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
321 }
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 2147
diff changeset
322 static void post_class_file_load_hook(Symbol* h_name, Handle class_loader,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
323 Handle h_protection_domain,
a61af66fc99e Initial load
duke
parents:
diff changeset
324 unsigned char **data_ptr, unsigned char **end_ptr,
a61af66fc99e Initial load
duke
parents:
diff changeset
325 unsigned char **cached_data_ptr,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
326 jint *cached_length_ptr) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
327 static void post_native_method_bind(Method* method, address* function_ptr) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
328 static void post_compiled_method_load(nmethod *nm) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
329 static void post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
330
1577
852d0157c696 6956931: assert(SafepointSynchronize::is_at_safepoint()) failed: must be executed at a safepoint
never
parents: 1397
diff changeset
331 // used to post a CompiledMethodUnload event
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
332 static void post_compiled_method_unload(jmethodID mid, const void *code_begin) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
333
a61af66fc99e Initial load
duke
parents:
diff changeset
334 // similiar to post_dynamic_code_generated except that it can be used to
a61af66fc99e Initial load
duke
parents:
diff changeset
335 // post a DynamicCodeGenerated event while holding locks in the VM. Any event
a61af66fc99e Initial load
duke
parents:
diff changeset
336 // posted using this function is recorded by the enclosing event collector
a61af66fc99e Initial load
duke
parents:
diff changeset
337 // -- JvmtiDynamicCodeEventCollector.
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
338 static void post_dynamic_code_generated_while_holding_locks(const char* name, address code_begin, address code_end) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
339
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
340 static void post_garbage_collection_finish() NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
341 static void post_garbage_collection_start() NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
342 static void post_data_dump() NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
343 static void post_monitor_contended_enter(JavaThread *thread, ObjectMonitor *obj_mntr) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
344 static void post_monitor_contended_entered(JavaThread *thread, ObjectMonitor *obj_mntr) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
345 static void post_monitor_wait(JavaThread *thread, oop obj, jlong timeout) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
346 static void post_monitor_waited(JavaThread *thread, ObjectMonitor *obj_mntr, jboolean timed_out) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
347 static void post_object_free(JvmtiEnv* env, jlong tag) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
348 static void post_resource_exhausted(jint resource_exhausted_flags, const char* detail) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
349 static void record_vm_internal_object_allocation(oop object) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
350 // Post objects collected by vm_object_alloc_event_collector.
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
351 static void post_vm_object_alloc(JavaThread *thread, oop object) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
352 // Collects vm internal objects for later event posting.
a61af66fc99e Initial load
duke
parents:
diff changeset
353 inline static void vm_object_alloc_event_collector(oop object) {
a61af66fc99e Initial load
duke
parents:
diff changeset
354 if (should_post_vm_object_alloc()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
355 record_vm_internal_object_allocation(object);
a61af66fc99e Initial load
duke
parents:
diff changeset
356 }
a61af66fc99e Initial load
duke
parents:
diff changeset
357 }
5935
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 3939
diff changeset
358 inline static void post_array_size_exhausted() {
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 3939
diff changeset
359 if (should_post_resource_exhausted()) {
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 3939
diff changeset
360 post_resource_exhausted(JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR,
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 3939
diff changeset
361 "Requested array size exceeds VM limit");
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 3939
diff changeset
362 }
a735aec54ea4 7123170: JCK vm/jvmti/ResourceExhausted/resexh001/resexh00101/ tests fails since 7u4 b02
sspitsyn
parents: 3939
diff changeset
363 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
364
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
365 static void cleanup_thread (JavaThread* thread) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
366
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
367 static void oops_do(OopClosure* f) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
368 static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
369 static void gc_epilogue() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
370
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
371 static void transition_pending_onload_raw_monitors() NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
372
0
a61af66fc99e Initial load
duke
parents:
diff changeset
373 // attach support
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
374 static jint load_agent_library(AttachOperation* op, outputStream* out) NOT_JVMTI_RETURN_(JNI_ERR);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
375
a61af66fc99e Initial load
duke
parents:
diff changeset
376 // SetNativeMethodPrefix support
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
377 static char** get_all_native_method_prefixes(int* count_ptr) NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
378 };
a61af66fc99e Initial load
duke
parents:
diff changeset
379
a61af66fc99e Initial load
duke
parents:
diff changeset
380 // Support class used by JvmtiDynamicCodeEventCollector and others. It
a61af66fc99e Initial load
duke
parents:
diff changeset
381 // describes a single code blob by name and address range.
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 5935
diff changeset
382 class JvmtiCodeBlobDesc : public CHeapObj<mtInternal> {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
383 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
384 char _name[64];
a61af66fc99e Initial load
duke
parents:
diff changeset
385 address _code_begin;
a61af66fc99e Initial load
duke
parents:
diff changeset
386 address _code_end;
a61af66fc99e Initial load
duke
parents:
diff changeset
387
a61af66fc99e Initial load
duke
parents:
diff changeset
388 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
389 JvmtiCodeBlobDesc(const char *name, address code_begin, address code_end) {
a61af66fc99e Initial load
duke
parents:
diff changeset
390 assert(name != NULL, "all code blobs must be named");
a61af66fc99e Initial load
duke
parents:
diff changeset
391 strncpy(_name, name, sizeof(_name));
a61af66fc99e Initial load
duke
parents:
diff changeset
392 _name[sizeof(_name)-1] = '\0';
a61af66fc99e Initial load
duke
parents:
diff changeset
393 _code_begin = code_begin;
a61af66fc99e Initial load
duke
parents:
diff changeset
394 _code_end = code_end;
a61af66fc99e Initial load
duke
parents:
diff changeset
395 }
a61af66fc99e Initial load
duke
parents:
diff changeset
396 char* name() { return _name; }
a61af66fc99e Initial load
duke
parents:
diff changeset
397 address code_begin() { return _code_begin; }
a61af66fc99e Initial load
duke
parents:
diff changeset
398 address code_end() { return _code_end; }
a61af66fc99e Initial load
duke
parents:
diff changeset
399 };
a61af66fc99e Initial load
duke
parents:
diff changeset
400
a61af66fc99e Initial load
duke
parents:
diff changeset
401 // JvmtiEventCollector is a helper class to setup thread for
a61af66fc99e Initial load
duke
parents:
diff changeset
402 // event collection.
a61af66fc99e Initial load
duke
parents:
diff changeset
403 class JvmtiEventCollector : public StackObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
404 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
405 JvmtiEventCollector* _prev; // Save previous one to support nested event collector.
a61af66fc99e Initial load
duke
parents:
diff changeset
406
a61af66fc99e Initial load
duke
parents:
diff changeset
407 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
408 void setup_jvmti_thread_state(); // Set this collector in current thread.
a61af66fc99e Initial load
duke
parents:
diff changeset
409 void unset_jvmti_thread_state(); // Reset previous collector in current thread.
a61af66fc99e Initial load
duke
parents:
diff changeset
410 virtual bool is_dynamic_code_event() { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
411 virtual bool is_vm_object_alloc_event(){ return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
412 JvmtiEventCollector *get_prev() { return _prev; }
a61af66fc99e Initial load
duke
parents:
diff changeset
413 };
a61af66fc99e Initial load
duke
parents:
diff changeset
414
a61af66fc99e Initial load
duke
parents:
diff changeset
415 // A JvmtiDynamicCodeEventCollector is a helper class for the JvmtiExport
a61af66fc99e Initial load
duke
parents:
diff changeset
416 // interface. It collects "dynamic code generated" events that are posted
a61af66fc99e Initial load
duke
parents:
diff changeset
417 // while holding locks. When the event collector goes out of scope the
a61af66fc99e Initial load
duke
parents:
diff changeset
418 // events will be posted.
a61af66fc99e Initial load
duke
parents:
diff changeset
419 //
a61af66fc99e Initial load
duke
parents:
diff changeset
420 // Usage :-
a61af66fc99e Initial load
duke
parents:
diff changeset
421 //
a61af66fc99e Initial load
duke
parents:
diff changeset
422 // {
a61af66fc99e Initial load
duke
parents:
diff changeset
423 // JvmtiDynamicCodeEventCollector event_collector;
a61af66fc99e Initial load
duke
parents:
diff changeset
424 // :
a61af66fc99e Initial load
duke
parents:
diff changeset
425 // { MutexLocker ml(...)
a61af66fc99e Initial load
duke
parents:
diff changeset
426 // :
a61af66fc99e Initial load
duke
parents:
diff changeset
427 // JvmtiExport::post_dynamic_code_generated_while_holding_locks(...)
a61af66fc99e Initial load
duke
parents:
diff changeset
428 // }
a61af66fc99e Initial load
duke
parents:
diff changeset
429 // // event collector goes out of scope => post events to profiler.
a61af66fc99e Initial load
duke
parents:
diff changeset
430 // }
a61af66fc99e Initial load
duke
parents:
diff changeset
431
a61af66fc99e Initial load
duke
parents:
diff changeset
432 class JvmtiDynamicCodeEventCollector : public JvmtiEventCollector {
a61af66fc99e Initial load
duke
parents:
diff changeset
433 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
434 GrowableArray<JvmtiCodeBlobDesc*>* _code_blobs; // collected code blob events
a61af66fc99e Initial load
duke
parents:
diff changeset
435
a61af66fc99e Initial load
duke
parents:
diff changeset
436 friend class JvmtiExport;
a61af66fc99e Initial load
duke
parents:
diff changeset
437 void register_stub(const char* name, address start, address end);
a61af66fc99e Initial load
duke
parents:
diff changeset
438
a61af66fc99e Initial load
duke
parents:
diff changeset
439 public:
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
440 JvmtiDynamicCodeEventCollector() NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
441 ~JvmtiDynamicCodeEventCollector() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
442 bool is_dynamic_code_event() { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
443
a61af66fc99e Initial load
duke
parents:
diff changeset
444 };
a61af66fc99e Initial load
duke
parents:
diff changeset
445
a61af66fc99e Initial load
duke
parents:
diff changeset
446 // Used to record vm internally allocated object oops and post
a61af66fc99e Initial load
duke
parents:
diff changeset
447 // vm object alloc event for objects visible to java world.
a61af66fc99e Initial load
duke
parents:
diff changeset
448 // Constructor enables JvmtiThreadState flag and all vm allocated
a61af66fc99e Initial load
duke
parents:
diff changeset
449 // objects are recorded in a growable array. When destructor is
a61af66fc99e Initial load
duke
parents:
diff changeset
450 // called the vm object alloc event is posted for each objects
a61af66fc99e Initial load
duke
parents:
diff changeset
451 // visible to java world.
a61af66fc99e Initial load
duke
parents:
diff changeset
452 // See jvm.cpp file for its usage.
a61af66fc99e Initial load
duke
parents:
diff changeset
453 //
a61af66fc99e Initial load
duke
parents:
diff changeset
454 class JvmtiVMObjectAllocEventCollector : public JvmtiEventCollector {
a61af66fc99e Initial load
duke
parents:
diff changeset
455 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
456 GrowableArray<oop>* _allocated; // field to record vm internally allocated object oop.
a61af66fc99e Initial load
duke
parents:
diff changeset
457 bool _enable; // This flag is enabled in constructor and disabled
a61af66fc99e Initial load
duke
parents:
diff changeset
458 // in destructor before posting event. To avoid
a61af66fc99e Initial load
duke
parents:
diff changeset
459 // collection of objects allocated while running java code inside
a61af66fc99e Initial load
duke
parents:
diff changeset
460 // agent post_vm_object_alloc() event handler.
a61af66fc99e Initial load
duke
parents:
diff changeset
461
a61af66fc99e Initial load
duke
parents:
diff changeset
462 //GC support
a61af66fc99e Initial load
duke
parents:
diff changeset
463 void oops_do(OopClosure* f);
a61af66fc99e Initial load
duke
parents:
diff changeset
464
a61af66fc99e Initial load
duke
parents:
diff changeset
465 friend class JvmtiExport;
a61af66fc99e Initial load
duke
parents:
diff changeset
466 // Record vm allocated object oop.
a61af66fc99e Initial load
duke
parents:
diff changeset
467 inline void record_allocation(oop obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
468
a61af66fc99e Initial load
duke
parents:
diff changeset
469 //GC support
a61af66fc99e Initial load
duke
parents:
diff changeset
470 static void oops_do_for_all_threads(OopClosure* f);
a61af66fc99e Initial load
duke
parents:
diff changeset
471
a61af66fc99e Initial load
duke
parents:
diff changeset
472 public:
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
473 JvmtiVMObjectAllocEventCollector() NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
474 ~JvmtiVMObjectAllocEventCollector() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
475 bool is_vm_object_alloc_event() { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
476
a61af66fc99e Initial load
duke
parents:
diff changeset
477 bool is_enabled() { return _enable; }
a61af66fc99e Initial load
duke
parents:
diff changeset
478 void set_enabled(bool on) { _enable = on; }
a61af66fc99e Initial load
duke
parents:
diff changeset
479 };
a61af66fc99e Initial load
duke
parents:
diff changeset
480
a61af66fc99e Initial load
duke
parents:
diff changeset
481
a61af66fc99e Initial load
duke
parents:
diff changeset
482
a61af66fc99e Initial load
duke
parents:
diff changeset
483 // Marker class to disable the posting of VMObjectAlloc events
a61af66fc99e Initial load
duke
parents:
diff changeset
484 // within its scope.
a61af66fc99e Initial load
duke
parents:
diff changeset
485 //
a61af66fc99e Initial load
duke
parents:
diff changeset
486 // Usage :-
a61af66fc99e Initial load
duke
parents:
diff changeset
487 //
a61af66fc99e Initial load
duke
parents:
diff changeset
488 // {
a61af66fc99e Initial load
duke
parents:
diff changeset
489 // NoJvmtiVMObjectAllocMark njm;
a61af66fc99e Initial load
duke
parents:
diff changeset
490 // :
a61af66fc99e Initial load
duke
parents:
diff changeset
491 // // VMObjAlloc event will not be posted
a61af66fc99e Initial load
duke
parents:
diff changeset
492 // JvmtiExport::vm_object_alloc_event_collector(obj);
a61af66fc99e Initial load
duke
parents:
diff changeset
493 // :
a61af66fc99e Initial load
duke
parents:
diff changeset
494 // }
a61af66fc99e Initial load
duke
parents:
diff changeset
495
a61af66fc99e Initial load
duke
parents:
diff changeset
496 class NoJvmtiVMObjectAllocMark : public StackObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
497 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
498 // enclosing collector if enabled, NULL otherwise
a61af66fc99e Initial load
duke
parents:
diff changeset
499 JvmtiVMObjectAllocEventCollector *_collector;
a61af66fc99e Initial load
duke
parents:
diff changeset
500
a61af66fc99e Initial load
duke
parents:
diff changeset
501 bool was_enabled() { return _collector != NULL; }
a61af66fc99e Initial load
duke
parents:
diff changeset
502
a61af66fc99e Initial load
duke
parents:
diff changeset
503 public:
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
504 NoJvmtiVMObjectAllocMark() NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
505 ~NoJvmtiVMObjectAllocMark() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
506 };
a61af66fc99e Initial load
duke
parents:
diff changeset
507
a61af66fc99e Initial load
duke
parents:
diff changeset
508
a61af66fc99e Initial load
duke
parents:
diff changeset
509 // Base class for reporting GC events to JVMTI.
a61af66fc99e Initial load
duke
parents:
diff changeset
510 class JvmtiGCMarker : public StackObj {
2125
7246a374a9f2 6458402: 3 jvmti tests fail with CMS and +ExplicitGCInvokesConcurrent
kamg
parents: 1983
diff changeset
511 public:
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
512 JvmtiGCMarker() NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
513 ~JvmtiGCMarker() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
514 };
a61af66fc99e Initial load
duke
parents:
diff changeset
515
a61af66fc99e Initial load
duke
parents:
diff changeset
516 // JvmtiHideSingleStepping is a helper class for hiding
a61af66fc99e Initial load
duke
parents:
diff changeset
517 // internal single step events.
a61af66fc99e Initial load
duke
parents:
diff changeset
518 class JvmtiHideSingleStepping : public StackObj {
a61af66fc99e Initial load
duke
parents:
diff changeset
519 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
520 bool _single_step_hidden;
a61af66fc99e Initial load
duke
parents:
diff changeset
521 JavaThread * _thread;
a61af66fc99e Initial load
duke
parents:
diff changeset
522
a61af66fc99e Initial load
duke
parents:
diff changeset
523 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
524 JvmtiHideSingleStepping(JavaThread * thread) {
a61af66fc99e Initial load
duke
parents:
diff changeset
525 assert(thread != NULL, "sanity check");
a61af66fc99e Initial load
duke
parents:
diff changeset
526
a61af66fc99e Initial load
duke
parents:
diff changeset
527 _single_step_hidden = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
528 _thread = thread;
a61af66fc99e Initial load
duke
parents:
diff changeset
529 if (JvmtiExport::should_post_single_step()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
530 _single_step_hidden = JvmtiExport::hide_single_stepping(_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
531 }
a61af66fc99e Initial load
duke
parents:
diff changeset
532 }
a61af66fc99e Initial load
duke
parents:
diff changeset
533
a61af66fc99e Initial load
duke
parents:
diff changeset
534 ~JvmtiHideSingleStepping() {
a61af66fc99e Initial load
duke
parents:
diff changeset
535 if (_single_step_hidden) {
a61af66fc99e Initial load
duke
parents:
diff changeset
536 JvmtiExport::expose_single_stepping(_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
537 }
a61af66fc99e Initial load
duke
parents:
diff changeset
538 }
a61af66fc99e Initial load
duke
parents:
diff changeset
539 };
a61af66fc99e Initial load
duke
parents:
diff changeset
540
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1579
diff changeset
541 #endif // SHARE_VM_PRIMS_JVMTIEXPORT_HPP