annotate src/share/vm/prims/jvmtiExport.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents 55fb97c4c58d
children 016b6a289fc4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
17467
55fb97c4c58d 8029233: Update copyright year to match last edit in jdk8 hotspot repository for 2013
mikael
parents: 11148
diff changeset
2 * Copyright (c) 1998, 2013, 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"
8001
db9981fd3124 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 6972
diff changeset
37 #include "utilities/macros.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
38
1983
c760f78e0a53 7003125: precompiled.hpp is included when precompiled headers are not used
stefank
parents: 1972
diff changeset
39 // Must be included after jvmti.h.
c760f78e0a53 7003125: precompiled.hpp is included when precompiled headers are not used
stefank
parents: 1972
diff changeset
40 #include "code/jvmticmlr.h"
c760f78e0a53 7003125: precompiled.hpp is included when precompiled headers are not used
stefank
parents: 1972
diff changeset
41
0
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // Forward declarations
a61af66fc99e Initial load
duke
parents:
diff changeset
43
a61af66fc99e Initial load
duke
parents:
diff changeset
44 class JvmtiEventControllerPrivate;
a61af66fc99e Initial load
duke
parents:
diff changeset
45 class JvmtiManageCapabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
46 class JvmtiEnv;
a61af66fc99e Initial load
duke
parents:
diff changeset
47 class JvmtiThreadState;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 class AttachOperation;
a61af66fc99e Initial load
duke
parents:
diff changeset
49
a61af66fc99e Initial load
duke
parents:
diff changeset
50 #define JVMTI_SUPPORT_FLAG(key) \
a61af66fc99e Initial load
duke
parents:
diff changeset
51 private: \
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
52 static bool _##key; \
0
a61af66fc99e Initial load
duke
parents:
diff changeset
53 public: \
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
54 inline static void set_##key(bool on) { \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
55 JVMTI_ONLY(_##key = (on != 0)); \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
56 NOT_JVMTI(report_unsupported(on)); \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
57 } \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
58 inline static bool key() { \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
59 JVMTI_ONLY(return _##key); \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
60 NOT_JVMTI(return false); \
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
61 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
62
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // This class contains the JVMTI interface for the rest of hotspot.
a61af66fc99e Initial load
duke
parents:
diff changeset
65 //
a61af66fc99e Initial load
duke
parents:
diff changeset
66 class JvmtiExport : public AllStatic {
3939
f6f3bb0ee072 7088955: add C2 IR support to the SA
never
parents: 2301
diff changeset
67 friend class VMStructs;
6972
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6854
diff changeset
68 friend class CompileReplay;
bd7a7ce2e264 6830717: replay of compilations would help with debugging
minqi
parents: 6854
diff changeset
69
0
a61af66fc99e Initial load
duke
parents:
diff changeset
70 private:
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
71
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
72 #if INCLUDE_JVMTI
0
a61af66fc99e Initial load
duke
parents:
diff changeset
73 static int _field_access_count;
a61af66fc99e Initial load
duke
parents:
diff changeset
74 static int _field_modification_count;
a61af66fc99e Initial load
duke
parents:
diff changeset
75
a61af66fc99e Initial load
duke
parents:
diff changeset
76 static bool _can_access_local_variables;
a61af66fc99e Initial load
duke
parents:
diff changeset
77 static bool _can_hotswap_or_post_breakpoint;
a61af66fc99e Initial load
duke
parents:
diff changeset
78 static bool _can_modify_any_class;
a61af66fc99e Initial load
duke
parents:
diff changeset
79 static bool _can_walk_any_space;
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
80 #endif // INCLUDE_JVMTI
0
a61af66fc99e Initial load
duke
parents:
diff changeset
81
a61af66fc99e Initial load
duke
parents:
diff changeset
82 JVMTI_SUPPORT_FLAG(can_get_source_debug_extension)
a61af66fc99e Initial load
duke
parents:
diff changeset
83 JVMTI_SUPPORT_FLAG(can_maintain_original_method_order)
a61af66fc99e Initial load
duke
parents:
diff changeset
84 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
85 JVMTI_SUPPORT_FLAG(can_post_on_exceptions)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
86 JVMTI_SUPPORT_FLAG(can_post_breakpoint)
a61af66fc99e Initial load
duke
parents:
diff changeset
87 JVMTI_SUPPORT_FLAG(can_post_field_access)
a61af66fc99e Initial load
duke
parents:
diff changeset
88 JVMTI_SUPPORT_FLAG(can_post_field_modification)
a61af66fc99e Initial load
duke
parents:
diff changeset
89 JVMTI_SUPPORT_FLAG(can_post_method_entry)
a61af66fc99e Initial load
duke
parents:
diff changeset
90 JVMTI_SUPPORT_FLAG(can_post_method_exit)
a61af66fc99e Initial load
duke
parents:
diff changeset
91 JVMTI_SUPPORT_FLAG(can_pop_frame)
a61af66fc99e Initial load
duke
parents:
diff changeset
92 JVMTI_SUPPORT_FLAG(can_force_early_return)
a61af66fc99e Initial load
duke
parents:
diff changeset
93
a61af66fc99e Initial load
duke
parents:
diff changeset
94 friend class JvmtiEventControllerPrivate; // should only modify these flags
a61af66fc99e Initial load
duke
parents:
diff changeset
95 JVMTI_SUPPORT_FLAG(should_post_single_step)
a61af66fc99e Initial load
duke
parents:
diff changeset
96 JVMTI_SUPPORT_FLAG(should_post_field_access)
a61af66fc99e Initial load
duke
parents:
diff changeset
97 JVMTI_SUPPORT_FLAG(should_post_field_modification)
a61af66fc99e Initial load
duke
parents:
diff changeset
98 JVMTI_SUPPORT_FLAG(should_post_class_load)
a61af66fc99e Initial load
duke
parents:
diff changeset
99 JVMTI_SUPPORT_FLAG(should_post_class_prepare)
a61af66fc99e Initial load
duke
parents:
diff changeset
100 JVMTI_SUPPORT_FLAG(should_post_class_unload)
a61af66fc99e Initial load
duke
parents:
diff changeset
101 JVMTI_SUPPORT_FLAG(should_post_native_method_bind)
a61af66fc99e Initial load
duke
parents:
diff changeset
102 JVMTI_SUPPORT_FLAG(should_post_compiled_method_load)
a61af66fc99e Initial load
duke
parents:
diff changeset
103 JVMTI_SUPPORT_FLAG(should_post_compiled_method_unload)
a61af66fc99e Initial load
duke
parents:
diff changeset
104 JVMTI_SUPPORT_FLAG(should_post_dynamic_code_generated)
a61af66fc99e Initial load
duke
parents:
diff changeset
105 JVMTI_SUPPORT_FLAG(should_post_monitor_contended_enter)
a61af66fc99e Initial load
duke
parents:
diff changeset
106 JVMTI_SUPPORT_FLAG(should_post_monitor_contended_entered)
a61af66fc99e Initial load
duke
parents:
diff changeset
107 JVMTI_SUPPORT_FLAG(should_post_monitor_wait)
a61af66fc99e Initial load
duke
parents:
diff changeset
108 JVMTI_SUPPORT_FLAG(should_post_monitor_waited)
a61af66fc99e Initial load
duke
parents:
diff changeset
109 JVMTI_SUPPORT_FLAG(should_post_data_dump)
a61af66fc99e Initial load
duke
parents:
diff changeset
110 JVMTI_SUPPORT_FLAG(should_post_garbage_collection_start)
a61af66fc99e Initial load
duke
parents:
diff changeset
111 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
112 JVMTI_SUPPORT_FLAG(should_post_on_exceptions)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
113
a61af66fc99e Initial load
duke
parents:
diff changeset
114 // ------ the below maybe don't have to be (but are for now)
a61af66fc99e Initial load
duke
parents:
diff changeset
115 // fixed conditions here ------------
a61af66fc99e Initial load
duke
parents:
diff changeset
116 // any events can be enabled
a61af66fc99e Initial load
duke
parents:
diff changeset
117 JVMTI_SUPPORT_FLAG(should_post_thread_life)
a61af66fc99e Initial load
duke
parents:
diff changeset
118 JVMTI_SUPPORT_FLAG(should_post_object_free)
a61af66fc99e Initial load
duke
parents:
diff changeset
119 JVMTI_SUPPORT_FLAG(should_post_resource_exhausted)
a61af66fc99e Initial load
duke
parents:
diff changeset
120
a61af66fc99e Initial load
duke
parents:
diff changeset
121 // we are holding objects on the heap - need to talk to GC - e.g.
a61af66fc99e Initial load
duke
parents:
diff changeset
122 // breakpoint info
a61af66fc99e Initial load
duke
parents:
diff changeset
123 JVMTI_SUPPORT_FLAG(should_clean_up_heap_objects)
a61af66fc99e Initial load
duke
parents:
diff changeset
124 JVMTI_SUPPORT_FLAG(should_post_vm_object_alloc)
a61af66fc99e Initial load
duke
parents:
diff changeset
125
a61af66fc99e Initial load
duke
parents:
diff changeset
126 // If flag cannot be implemented, give an error if on=true
a61af66fc99e Initial load
duke
parents:
diff changeset
127 static void report_unsupported(bool on);
a61af66fc99e Initial load
duke
parents:
diff changeset
128
a61af66fc99e Initial load
duke
parents:
diff changeset
129 // these should only be called by the friend class
a61af66fc99e Initial load
duke
parents:
diff changeset
130 friend class JvmtiManageCapabilities;
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
131 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
132 JVMTI_ONLY(_can_modify_any_class = (on != 0);)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
133 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
134 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
135 JVMTI_ONLY(_can_access_local_variables = (on != 0);)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
136 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
137 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
138 JVMTI_ONLY(_can_hotswap_or_post_breakpoint = (on != 0);)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
139 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
140 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
141 JVMTI_ONLY(_can_walk_any_space = (on != 0);)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
142 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
143
a61af66fc99e Initial load
duke
parents:
diff changeset
144 enum {
a61af66fc99e Initial load
duke
parents:
diff changeset
145 JVMTI_VERSION_MASK = 0x70000000,
a61af66fc99e Initial load
duke
parents:
diff changeset
146 JVMTI_VERSION_VALUE = 0x30000000,
a61af66fc99e Initial load
duke
parents:
diff changeset
147 JVMDI_VERSION_VALUE = 0x20000000
a61af66fc99e Initial load
duke
parents:
diff changeset
148 };
a61af66fc99e Initial load
duke
parents:
diff changeset
149
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
150 static void post_field_modification(JavaThread *thread, Method* method, address location,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
151 KlassHandle field_klass, Handle object, jfieldID field,
a61af66fc99e Initial load
duke
parents:
diff changeset
152 char sig_type, jvalue *value);
a61af66fc99e Initial load
duke
parents:
diff changeset
153
a61af66fc99e Initial load
duke
parents:
diff changeset
154
a61af66fc99e Initial load
duke
parents:
diff changeset
155 // posts a DynamicCodeGenerated event (internal/private implementation).
a61af66fc99e Initial load
duke
parents:
diff changeset
156 // 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
157 // internal implementation. Also called from JvmtiDeferredEvent::post()
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
158 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
159
2301
f91db74a6810 7017640: Fix for 6766644 deadlocks on some NSK tests when running with -Xcomp
kamg
parents: 2195
diff changeset
160 private:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
161
a61af66fc99e Initial load
duke
parents:
diff changeset
162 // GenerateEvents support to allow posting of CompiledMethodLoad and
a61af66fc99e Initial load
duke
parents:
diff changeset
163 // DynamicCodeGenerated events for a given environment.
a61af66fc99e Initial load
duke
parents:
diff changeset
164 friend class JvmtiCodeBlobEvents;
a61af66fc99e Initial load
duke
parents:
diff changeset
165
a61af66fc99e Initial load
duke
parents:
diff changeset
166 static void post_compiled_method_load(JvmtiEnv* env, const jmethodID method, const jint length,
a61af66fc99e Initial load
duke
parents:
diff changeset
167 const void *code_begin, const jint map_length,
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
168 const jvmtiAddrLocationMap* map) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
169 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
170 const void *code_end) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
171
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // The RedefineClasses() API breaks some invariants in the "regular"
a61af66fc99e Initial load
duke
parents:
diff changeset
173 // system. For example, there are sanity checks when GC'ing nmethods
a61af66fc99e Initial load
duke
parents:
diff changeset
174 // that require the containing class to be unloading. However, when a
a61af66fc99e Initial load
duke
parents:
diff changeset
175 // method is redefined, the old method and nmethod can become GC'able
a61af66fc99e Initial load
duke
parents:
diff changeset
176 // without the containing class unloading. The state of becoming
a61af66fc99e Initial load
duke
parents:
diff changeset
177 // GC'able can be asynchronous to the RedefineClasses() call since
a61af66fc99e Initial load
duke
parents:
diff changeset
178 // the old method may still be running and cannot be GC'ed until
a61af66fc99e Initial load
duke
parents:
diff changeset
179 // after all old invocations have finished. Additionally, a method
a61af66fc99e Initial load
duke
parents:
diff changeset
180 // that has not been redefined may have an nmethod that depends on
a61af66fc99e Initial load
duke
parents:
diff changeset
181 // the redefined method. The dependent nmethod will get deopted in
a61af66fc99e Initial load
duke
parents:
diff changeset
182 // this case and may also be GC'able without the containing class
a61af66fc99e Initial load
duke
parents:
diff changeset
183 // being unloaded.
a61af66fc99e Initial load
duke
parents:
diff changeset
184 //
a61af66fc99e Initial load
duke
parents:
diff changeset
185 // This flag indicates whether RedefineClasses() has ever redefined
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // one or more classes during the lifetime of the VM. The flag should
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // only be set by the friend class and can be queried by other sub
a61af66fc99e Initial load
duke
parents:
diff changeset
188 // systems as needed to relax invariant checks.
a61af66fc99e Initial load
duke
parents:
diff changeset
189 static bool _has_redefined_a_class;
a61af66fc99e Initial load
duke
parents:
diff changeset
190 friend class VM_RedefineClasses;
a61af66fc99e Initial load
duke
parents:
diff changeset
191 inline static void set_has_redefined_a_class() {
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
192 JVMTI_ONLY(_has_redefined_a_class = true;)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
193 }
a61af66fc99e Initial load
duke
parents:
diff changeset
194 // Flag to indicate if the compiler has recorded all dependencies. When the
a61af66fc99e Initial load
duke
parents:
diff changeset
195 // can_redefine_classes capability is enabled in the OnLoad phase then the compiler
a61af66fc99e Initial load
duke
parents:
diff changeset
196 // records all dependencies from startup. However if the capability is first
a61af66fc99e Initial load
duke
parents:
diff changeset
197 // enabled some time later then the dependencies recorded by the compiler
a61af66fc99e Initial load
duke
parents:
diff changeset
198 // are incomplete. This flag is used by RedefineClasses to know if the
a61af66fc99e Initial load
duke
parents:
diff changeset
199 // dependency information is complete or not.
a61af66fc99e Initial load
duke
parents:
diff changeset
200 static bool _all_dependencies_are_recorded;
a61af66fc99e Initial load
duke
parents:
diff changeset
201
a61af66fc99e Initial load
duke
parents:
diff changeset
202 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
203 inline static bool has_redefined_a_class() {
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
204 JVMTI_ONLY(return _has_redefined_a_class);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
205 NOT_JVMTI(return false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
206 }
a61af66fc99e Initial load
duke
parents:
diff changeset
207
a61af66fc99e Initial load
duke
parents:
diff changeset
208 inline static bool all_dependencies_are_recorded() {
a61af66fc99e Initial load
duke
parents:
diff changeset
209 return _all_dependencies_are_recorded;
a61af66fc99e Initial load
duke
parents:
diff changeset
210 }
a61af66fc99e Initial load
duke
parents:
diff changeset
211
a61af66fc99e Initial load
duke
parents:
diff changeset
212 inline static void set_all_dependencies_are_recorded(bool on) {
a61af66fc99e Initial load
duke
parents:
diff changeset
213 _all_dependencies_are_recorded = (on != 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
214 }
a61af66fc99e Initial load
duke
parents:
diff changeset
215
a61af66fc99e Initial load
duke
parents:
diff changeset
216
a61af66fc99e Initial load
duke
parents:
diff changeset
217 // 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
218 static void enter_onload_phase() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
219
a61af66fc99e Initial load
duke
parents:
diff changeset
220 // 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
221 static void enter_primordial_phase() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
222
a61af66fc99e Initial load
duke
parents:
diff changeset
223 // 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
224 static void enter_start_phase() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
225
a61af66fc99e Initial load
duke
parents:
diff changeset
226 // 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
227 static void enter_live_phase() NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
228
a61af66fc99e Initial load
duke
parents:
diff changeset
229 // ------ 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
230 inline static bool can_modify_any_class() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
231 JVMTI_ONLY(return _can_modify_any_class);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
232 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
233 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
234 inline static bool can_access_local_variables() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
235 JVMTI_ONLY(return _can_access_local_variables);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
236 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
237 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
238 inline static bool can_hotswap_or_post_breakpoint() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
239 JVMTI_ONLY(return _can_hotswap_or_post_breakpoint);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
240 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
241 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
242 inline static bool can_walk_any_space() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
243 JVMTI_ONLY(return _can_walk_any_space);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
244 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
245 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
246
a61af66fc99e Initial load
duke
parents:
diff changeset
247 // field access management
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
248 static address get_field_access_count_addr() NOT_JVMTI_RETURN_(0);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
249
a61af66fc99e Initial load
duke
parents:
diff changeset
250 // field modification management
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
251 static address get_field_modification_count_addr() NOT_JVMTI_RETURN_(0);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
252
a61af66fc99e Initial load
duke
parents:
diff changeset
253 // -----------------
a61af66fc99e Initial load
duke
parents:
diff changeset
254
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
255 static bool is_jvmti_version(jint version) {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
256 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
257 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
258 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
259 static bool is_jvmdi_version(jint version) {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
260 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
261 NOT_JVMTI(return false);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
262 }
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
263 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
264 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
265 int * micro) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
266
a61af66fc99e Initial load
duke
parents:
diff changeset
267 // single stepping management methods
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
268 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
269 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
270 static bool hide_single_stepping(JavaThread *thread) NOT_JVMTI_RETURN_(false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
271
a61af66fc99e Initial load
duke
parents:
diff changeset
272 // 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
273 static void post_vm_start () NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
274 static void post_vm_initialized () NOT_JVMTI_RETURN;
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
275 static void post_vm_death () NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
276
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
277 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
278 static void post_raw_breakpoint (JavaThread *thread, Method* method, address location) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
279
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
280 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
281 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
282
a61af66fc99e Initial load
duke
parents:
diff changeset
283 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
284 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
285 NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
286 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
287 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
288 NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
289 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
290 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
291 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
292 address location, KlassHandle field_klass, Handle object, jfieldID field) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
293 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
294 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
295 jvalue *value) NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
296 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
297 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
298 jvalue *value) NOT_JVMTI_RETURN_(NULL);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
299 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
300 Klass* klass, jfieldID fieldID, bool is_static, char sig_type,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
301 jvalue *value);
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6197
diff changeset
302 static void post_raw_field_modification(JavaThread *thread, Method* method,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
303 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
304 char sig_type, jvalue *value) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
305
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
306 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
307 static void post_method_exit (JavaThread *thread, Method* method, frame current_frame) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
308
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
309 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
310 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
311 static void post_class_prepare (JavaThread *thread, Klass* klass) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
312
6854
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
313 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
314 static void post_thread_end (JavaThread *thread) NOT_JVMTI_RETURN;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
315
a61af66fc99e Initial load
duke
parents:
diff changeset
316 // Support for java.lang.instrument agent loading.
a61af66fc99e Initial load
duke
parents:
diff changeset
317 static bool _should_post_class_file_load_hook;
a61af66fc99e Initial load
duke
parents:
diff changeset
318 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
319 inline static bool should_post_class_file_load_hook() {
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
320 JVMTI_ONLY(return _should_post_class_file_load_hook);
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
321 NOT_JVMTI(return false;)
fb19af007ffc 7189254: Change makefiles for more flexibility to override defaults
jprovino
parents: 6725
diff changeset
322 }
2177
3582bf76420e 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 2147
diff changeset
323 static void post_class_file_load_hook(Symbol* h_name, Handle class_loader,
0
a61af66fc99e Initial load
duke
parents:
diff changeset
324 Handle h_protection_domain,
a61af66fc99e Initial load
duke
parents:
diff changeset
325 unsigned char **data_ptr, unsigned char **end_ptr,
11148
825e6cb66923 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 8001
diff changeset
326 JvmtiCachedClassFileData **cache_ptr) NOT_JVMTI_RETURN;
6854
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