Mercurial > hg > truffle
comparison src/share/vm/prims/jvmtiExport.hpp @ 6854:fb19af007ffc
7189254: Change makefiles for more flexibility to override defaults
Summary: Change makefiles so that targets and parameters can be overridden by alternate makefiles.
Reviewed-by: dholmes, coleenp
author | jprovino |
---|---|
date | Wed, 10 Oct 2012 14:35:58 -0400 |
parents | da91efe96a93 |
children | bd7a7ce2e264 |
comparison
equal
deleted
inserted
replaced
6830:81e878c53615 | 6854:fb19af007ffc |
---|---|
44 class JvmtiManageCapabilities; | 44 class JvmtiManageCapabilities; |
45 class JvmtiEnv; | 45 class JvmtiEnv; |
46 class JvmtiThreadState; | 46 class JvmtiThreadState; |
47 class AttachOperation; | 47 class AttachOperation; |
48 | 48 |
49 #ifndef JVMTI_KERNEL | |
50 #define JVMTI_SUPPORT_FLAG(key) \ | |
51 private: \ | |
52 static bool _##key; \ | |
53 public: \ | |
54 inline static void set_##key(bool on) { _##key = (on != 0); } \ | |
55 inline static bool key() { return _##key; } | |
56 #else // JVMTI_KERNEL | |
57 #define JVMTI_SUPPORT_FLAG(key) \ | 49 #define JVMTI_SUPPORT_FLAG(key) \ |
58 private: \ | 50 private: \ |
59 const static bool _##key = false; \ | 51 static bool _##key; \ |
60 public: \ | 52 public: \ |
61 inline static void set_##key(bool on) { report_unsupported(on); } \ | 53 inline static void set_##key(bool on) { \ |
62 inline static bool key() { return _##key; } | 54 JVMTI_ONLY(_##key = (on != 0)); \ |
63 #endif // JVMTI_KERNEL | 55 NOT_JVMTI(report_unsupported(on)); \ |
56 } \ | |
57 inline static bool key() { \ | |
58 JVMTI_ONLY(return _##key); \ | |
59 NOT_JVMTI(return false); \ | |
60 } | |
64 | 61 |
65 | 62 |
66 // This class contains the JVMTI interface for the rest of hotspot. | 63 // This class contains the JVMTI interface for the rest of hotspot. |
67 // | 64 // |
68 class JvmtiExport : public AllStatic { | 65 class JvmtiExport : public AllStatic { |
69 friend class VMStructs; | 66 friend class VMStructs; |
70 private: | 67 private: |
68 | |
69 #if INCLUDE_JVMTI | |
71 static int _field_access_count; | 70 static int _field_access_count; |
72 static int _field_modification_count; | 71 static int _field_modification_count; |
73 | 72 |
74 static bool _can_access_local_variables; | 73 static bool _can_access_local_variables; |
75 static bool _can_hotswap_or_post_breakpoint; | 74 static bool _can_hotswap_or_post_breakpoint; |
76 static bool _can_modify_any_class; | 75 static bool _can_modify_any_class; |
77 static bool _can_walk_any_space; | 76 static bool _can_walk_any_space; |
77 #endif // INCLUDE_JVMTI | |
78 | 78 |
79 JVMTI_SUPPORT_FLAG(can_get_source_debug_extension) | 79 JVMTI_SUPPORT_FLAG(can_get_source_debug_extension) |
80 JVMTI_SUPPORT_FLAG(can_maintain_original_method_order) | 80 JVMTI_SUPPORT_FLAG(can_maintain_original_method_order) |
81 JVMTI_SUPPORT_FLAG(can_post_interpreter_events) | 81 JVMTI_SUPPORT_FLAG(can_post_interpreter_events) |
82 JVMTI_SUPPORT_FLAG(can_post_on_exceptions) | 82 JVMTI_SUPPORT_FLAG(can_post_on_exceptions) |
123 // If flag cannot be implemented, give an error if on=true | 123 // If flag cannot be implemented, give an error if on=true |
124 static void report_unsupported(bool on); | 124 static void report_unsupported(bool on); |
125 | 125 |
126 // these should only be called by the friend class | 126 // these should only be called by the friend class |
127 friend class JvmtiManageCapabilities; | 127 friend class JvmtiManageCapabilities; |
128 inline static void set_can_modify_any_class(bool on) { _can_modify_any_class = (on != 0); } | 128 inline static void set_can_modify_any_class(bool on) { |
129 inline static void set_can_access_local_variables(bool on) { _can_access_local_variables = (on != 0); } | 129 JVMTI_ONLY(_can_modify_any_class = (on != 0);) |
130 inline static void set_can_hotswap_or_post_breakpoint(bool on) { _can_hotswap_or_post_breakpoint = (on != 0); } | 130 } |
131 inline static void set_can_walk_any_space(bool on) { _can_walk_any_space = (on != 0); } | 131 inline static void set_can_access_local_variables(bool on) { |
132 JVMTI_ONLY(_can_access_local_variables = (on != 0);) | |
133 } | |
134 inline static void set_can_hotswap_or_post_breakpoint(bool on) { | |
135 JVMTI_ONLY(_can_hotswap_or_post_breakpoint = (on != 0);) | |
136 } | |
137 inline static void set_can_walk_any_space(bool on) { | |
138 JVMTI_ONLY(_can_walk_any_space = (on != 0);) | |
139 } | |
132 | 140 |
133 enum { | 141 enum { |
134 JVMTI_VERSION_MASK = 0x70000000, | 142 JVMTI_VERSION_MASK = 0x70000000, |
135 JVMTI_VERSION_VALUE = 0x30000000, | 143 JVMTI_VERSION_VALUE = 0x30000000, |
136 JVMDI_VERSION_VALUE = 0x20000000 | 144 JVMDI_VERSION_VALUE = 0x20000000 |
142 | 150 |
143 | 151 |
144 // posts a DynamicCodeGenerated event (internal/private implementation). | 152 // posts a DynamicCodeGenerated event (internal/private implementation). |
145 // The public post_dynamic_code_generated* functions make use of the | 153 // The public post_dynamic_code_generated* functions make use of the |
146 // internal implementation. Also called from JvmtiDeferredEvent::post() | 154 // internal implementation. Also called from JvmtiDeferredEvent::post() |
147 static void post_dynamic_code_generated_internal(const char *name, const void *code_begin, const void *code_end) KERNEL_RETURN; | 155 static void post_dynamic_code_generated_internal(const char *name, const void *code_begin, const void *code_end) NOT_JVMTI_RETURN; |
148 | 156 |
149 private: | 157 private: |
150 | 158 |
151 // GenerateEvents support to allow posting of CompiledMethodLoad and | 159 // GenerateEvents support to allow posting of CompiledMethodLoad and |
152 // DynamicCodeGenerated events for a given environment. | 160 // DynamicCodeGenerated events for a given environment. |
153 friend class JvmtiCodeBlobEvents; | 161 friend class JvmtiCodeBlobEvents; |
154 | 162 |
155 static void post_compiled_method_load(JvmtiEnv* env, const jmethodID method, const jint length, | 163 static void post_compiled_method_load(JvmtiEnv* env, const jmethodID method, const jint length, |
156 const void *code_begin, const jint map_length, | 164 const void *code_begin, const jint map_length, |
157 const jvmtiAddrLocationMap* map) KERNEL_RETURN; | 165 const jvmtiAddrLocationMap* map) NOT_JVMTI_RETURN; |
158 static void post_dynamic_code_generated(JvmtiEnv* env, const char *name, const void *code_begin, | 166 static void post_dynamic_code_generated(JvmtiEnv* env, const char *name, const void *code_begin, |
159 const void *code_end) KERNEL_RETURN; | 167 const void *code_end) NOT_JVMTI_RETURN; |
160 | 168 |
161 // The RedefineClasses() API breaks some invariants in the "regular" | 169 // The RedefineClasses() API breaks some invariants in the "regular" |
162 // system. For example, there are sanity checks when GC'ing nmethods | 170 // system. For example, there are sanity checks when GC'ing nmethods |
163 // that require the containing class to be unloading. However, when a | 171 // that require the containing class to be unloading. However, when a |
164 // method is redefined, the old method and nmethod can become GC'able | 172 // method is redefined, the old method and nmethod can become GC'able |
176 // only be set by the friend class and can be queried by other sub | 184 // only be set by the friend class and can be queried by other sub |
177 // systems as needed to relax invariant checks. | 185 // systems as needed to relax invariant checks. |
178 static bool _has_redefined_a_class; | 186 static bool _has_redefined_a_class; |
179 friend class VM_RedefineClasses; | 187 friend class VM_RedefineClasses; |
180 inline static void set_has_redefined_a_class() { | 188 inline static void set_has_redefined_a_class() { |
181 _has_redefined_a_class = true; | 189 JVMTI_ONLY(_has_redefined_a_class = true;) |
182 } | 190 } |
183 | |
184 // Flag to indicate if the compiler has recorded all dependencies. When the | 191 // Flag to indicate if the compiler has recorded all dependencies. When the |
185 // can_redefine_classes capability is enabled in the OnLoad phase then the compiler | 192 // can_redefine_classes capability is enabled in the OnLoad phase then the compiler |
186 // records all dependencies from startup. However if the capability is first | 193 // records all dependencies from startup. However if the capability is first |
187 // enabled some time later then the dependencies recorded by the compiler | 194 // enabled some time later then the dependencies recorded by the compiler |
188 // are incomplete. This flag is used by RedefineClasses to know if the | 195 // are incomplete. This flag is used by RedefineClasses to know if the |
189 // dependency information is complete or not. | 196 // dependency information is complete or not. |
190 static bool _all_dependencies_are_recorded; | 197 static bool _all_dependencies_are_recorded; |
191 | 198 |
192 public: | 199 public: |
193 inline static bool has_redefined_a_class() { | 200 inline static bool has_redefined_a_class() { |
194 return _has_redefined_a_class; | 201 JVMTI_ONLY(return _has_redefined_a_class); |
202 NOT_JVMTI(return false); | |
195 } | 203 } |
196 | 204 |
197 inline static bool all_dependencies_are_recorded() { | 205 inline static bool all_dependencies_are_recorded() { |
198 return _all_dependencies_are_recorded; | 206 return _all_dependencies_are_recorded; |
199 } | 207 } |
202 _all_dependencies_are_recorded = (on != 0); | 210 _all_dependencies_are_recorded = (on != 0); |
203 } | 211 } |
204 | 212 |
205 | 213 |
206 // let JVMTI know that the JVM_OnLoad code is running | 214 // let JVMTI know that the JVM_OnLoad code is running |
207 static void enter_onload_phase(); | 215 static void enter_onload_phase() NOT_JVMTI_RETURN; |
208 | 216 |
209 // let JVMTI know that the VM isn't up yet (and JVM_OnLoad code isn't running) | 217 // let JVMTI know that the VM isn't up yet (and JVM_OnLoad code isn't running) |
210 static void enter_primordial_phase(); | 218 static void enter_primordial_phase() NOT_JVMTI_RETURN; |
211 | 219 |
212 // let JVMTI know that the VM isn't up yet but JNI is live | 220 // let JVMTI know that the VM isn't up yet but JNI is live |
213 static void enter_start_phase(); | 221 static void enter_start_phase() NOT_JVMTI_RETURN; |
214 | 222 |
215 // let JVMTI know that the VM is fully up and running now | 223 // let JVMTI know that the VM is fully up and running now |
216 static void enter_live_phase(); | 224 static void enter_live_phase() NOT_JVMTI_RETURN; |
217 | 225 |
218 // ------ can_* conditions (below) are set at OnLoad and never changed ------------ | 226 // ------ can_* conditions (below) are set at OnLoad and never changed ------------ |
219 inline static bool can_modify_any_class() { return _can_modify_any_class; } | 227 inline static bool can_modify_any_class() { |
220 inline static bool can_access_local_variables() { return _can_access_local_variables; } | 228 JVMTI_ONLY(return _can_modify_any_class); |
221 inline static bool can_hotswap_or_post_breakpoint() { return _can_hotswap_or_post_breakpoint; } | 229 NOT_JVMTI(return false); |
222 inline static bool can_walk_any_space() { return _can_walk_any_space; } | 230 } |
231 inline static bool can_access_local_variables() { | |
232 JVMTI_ONLY(return _can_access_local_variables); | |
233 NOT_JVMTI(return false); | |
234 } | |
235 inline static bool can_hotswap_or_post_breakpoint() { | |
236 JVMTI_ONLY(return _can_hotswap_or_post_breakpoint); | |
237 NOT_JVMTI(return false); | |
238 } | |
239 inline static bool can_walk_any_space() { | |
240 JVMTI_ONLY(return _can_walk_any_space); | |
241 NOT_JVMTI(return false); | |
242 } | |
223 | 243 |
224 // field access management | 244 // field access management |
225 static address get_field_access_count_addr(); | 245 static address get_field_access_count_addr() NOT_JVMTI_RETURN_(0); |
226 | 246 |
227 // field modification management | 247 // field modification management |
228 static address get_field_modification_count_addr(); | 248 static address get_field_modification_count_addr() NOT_JVMTI_RETURN_(0); |
229 | 249 |
230 // ----------------- | 250 // ----------------- |
231 | 251 |
232 static bool is_jvmti_version(jint version) { return (version & JVMTI_VERSION_MASK) == JVMTI_VERSION_VALUE; } | 252 static bool is_jvmti_version(jint version) { |
233 static bool is_jvmdi_version(jint version) { return (version & JVMTI_VERSION_MASK) == JVMDI_VERSION_VALUE; } | 253 JVMTI_ONLY(return (version & JVMTI_VERSION_MASK) == JVMTI_VERSION_VALUE); |
234 static jint get_jvmti_interface(JavaVM *jvm, void **penv, jint version); | 254 NOT_JVMTI(return false); |
255 } | |
256 static bool is_jvmdi_version(jint version) { | |
257 JVMTI_ONLY(return (version & JVMTI_VERSION_MASK) == JVMDI_VERSION_VALUE); | |
258 NOT_JVMTI(return false); | |
259 } | |
260 static jint get_jvmti_interface(JavaVM *jvm, void **penv, jint version) NOT_JVMTI_RETURN_(0); | |
235 static void decode_version_values(jint version, int * major, int * minor, | 261 static void decode_version_values(jint version, int * major, int * minor, |
236 int * micro); | 262 int * micro) NOT_JVMTI_RETURN; |
237 | 263 |
238 // single stepping management methods | 264 // single stepping management methods |
239 static void at_single_stepping_point(JavaThread *thread, Method* method, address location) KERNEL_RETURN; | 265 static void at_single_stepping_point(JavaThread *thread, Method* method, address location) NOT_JVMTI_RETURN; |
240 static void expose_single_stepping(JavaThread *thread) KERNEL_RETURN; | 266 static void expose_single_stepping(JavaThread *thread) NOT_JVMTI_RETURN; |
241 static bool hide_single_stepping(JavaThread *thread) KERNEL_RETURN_(false); | 267 static bool hide_single_stepping(JavaThread *thread) NOT_JVMTI_RETURN_(false); |
242 | 268 |
243 // Methods that notify the debugger that something interesting has happened in the VM. | 269 // Methods that notify the debugger that something interesting has happened in the VM. |
244 static void post_vm_start (); | 270 static void post_vm_start () NOT_JVMTI_RETURN; |
245 static void post_vm_initialized (); | 271 static void post_vm_initialized () NOT_JVMTI_RETURN; |
246 static void post_vm_death (); | 272 static void post_vm_death () NOT_JVMTI_RETURN; |
247 | 273 |
248 static void post_single_step (JavaThread *thread, Method* method, address location) KERNEL_RETURN; | 274 static void post_single_step (JavaThread *thread, Method* method, address location) NOT_JVMTI_RETURN; |
249 static void post_raw_breakpoint (JavaThread *thread, Method* method, address location) KERNEL_RETURN; | 275 static void post_raw_breakpoint (JavaThread *thread, Method* method, address location) NOT_JVMTI_RETURN; |
250 | 276 |
251 static void post_exception_throw (JavaThread *thread, Method* method, address location, oop exception) KERNEL_RETURN; | 277 static void post_exception_throw (JavaThread *thread, Method* method, address location, oop exception) NOT_JVMTI_RETURN; |
252 static void notice_unwind_due_to_exception (JavaThread *thread, Method* method, address location, oop exception, bool in_handler_frame) KERNEL_RETURN; | 278 static void notice_unwind_due_to_exception (JavaThread *thread, Method* method, address location, oop exception, bool in_handler_frame) NOT_JVMTI_RETURN; |
253 | 279 |
254 static oop jni_GetField_probe (JavaThread *thread, jobject jobj, | 280 static oop jni_GetField_probe (JavaThread *thread, jobject jobj, |
255 oop obj, Klass* klass, jfieldID fieldID, bool is_static) | 281 oop obj, Klass* klass, jfieldID fieldID, bool is_static) |
256 KERNEL_RETURN_(NULL); | 282 NOT_JVMTI_RETURN_(NULL); |
257 static oop jni_GetField_probe_nh (JavaThread *thread, jobject jobj, | 283 static oop jni_GetField_probe_nh (JavaThread *thread, jobject jobj, |
258 oop obj, Klass* klass, jfieldID fieldID, bool is_static) | 284 oop obj, Klass* klass, jfieldID fieldID, bool is_static) |
259 KERNEL_RETURN_(NULL); | 285 NOT_JVMTI_RETURN_(NULL); |
260 static void post_field_access_by_jni (JavaThread *thread, oop obj, | 286 static void post_field_access_by_jni (JavaThread *thread, oop obj, |
261 Klass* klass, jfieldID fieldID, bool is_static) KERNEL_RETURN; | 287 Klass* klass, jfieldID fieldID, bool is_static) NOT_JVMTI_RETURN; |
262 static void post_field_access (JavaThread *thread, Method* method, | 288 static void post_field_access (JavaThread *thread, Method* method, |
263 address location, KlassHandle field_klass, Handle object, jfieldID field) KERNEL_RETURN; | 289 address location, KlassHandle field_klass, Handle object, jfieldID field) NOT_JVMTI_RETURN; |
264 static oop jni_SetField_probe (JavaThread *thread, jobject jobj, | 290 static oop jni_SetField_probe (JavaThread *thread, jobject jobj, |
265 oop obj, Klass* klass, jfieldID fieldID, bool is_static, char sig_type, | 291 oop obj, Klass* klass, jfieldID fieldID, bool is_static, char sig_type, |
266 jvalue *value) KERNEL_RETURN_(NULL); | 292 jvalue *value) NOT_JVMTI_RETURN_(NULL); |
267 static oop jni_SetField_probe_nh (JavaThread *thread, jobject jobj, | 293 static oop jni_SetField_probe_nh (JavaThread *thread, jobject jobj, |
268 oop obj, Klass* klass, jfieldID fieldID, bool is_static, char sig_type, | 294 oop obj, Klass* klass, jfieldID fieldID, bool is_static, char sig_type, |
269 jvalue *value) KERNEL_RETURN_(NULL); | 295 jvalue *value) NOT_JVMTI_RETURN_(NULL); |
270 static void post_field_modification_by_jni(JavaThread *thread, oop obj, | 296 static void post_field_modification_by_jni(JavaThread *thread, oop obj, |
271 Klass* klass, jfieldID fieldID, bool is_static, char sig_type, | 297 Klass* klass, jfieldID fieldID, bool is_static, char sig_type, |
272 jvalue *value); | 298 jvalue *value); |
273 static void post_raw_field_modification(JavaThread *thread, Method* method, | 299 static void post_raw_field_modification(JavaThread *thread, Method* method, |
274 address location, KlassHandle field_klass, Handle object, jfieldID field, | 300 address location, KlassHandle field_klass, Handle object, jfieldID field, |
275 char sig_type, jvalue *value) KERNEL_RETURN; | 301 char sig_type, jvalue *value) NOT_JVMTI_RETURN; |
276 | 302 |
277 static void post_method_entry (JavaThread *thread, Method* method, frame current_frame) KERNEL_RETURN; | 303 static void post_method_entry (JavaThread *thread, Method* method, frame current_frame) NOT_JVMTI_RETURN; |
278 static void post_method_exit (JavaThread *thread, Method* method, frame current_frame) KERNEL_RETURN; | 304 static void post_method_exit (JavaThread *thread, Method* method, frame current_frame) NOT_JVMTI_RETURN; |
279 | 305 |
280 static void post_class_load (JavaThread *thread, Klass* klass) KERNEL_RETURN; | 306 static void post_class_load (JavaThread *thread, Klass* klass) NOT_JVMTI_RETURN; |
281 static void post_class_unload (Klass* klass) KERNEL_RETURN; | 307 static void post_class_unload (Klass* klass) NOT_JVMTI_RETURN; |
282 static void post_class_prepare (JavaThread *thread, Klass* klass) KERNEL_RETURN; | 308 static void post_class_prepare (JavaThread *thread, Klass* klass) NOT_JVMTI_RETURN; |
283 | 309 |
284 static void post_thread_start (JavaThread *thread) KERNEL_RETURN; | 310 static void post_thread_start (JavaThread *thread) NOT_JVMTI_RETURN; |
285 static void post_thread_end (JavaThread *thread) KERNEL_RETURN; | 311 static void post_thread_end (JavaThread *thread) NOT_JVMTI_RETURN; |
286 | 312 |
287 // Support for java.lang.instrument agent loading. | 313 // Support for java.lang.instrument agent loading. |
288 static bool _should_post_class_file_load_hook; | 314 static bool _should_post_class_file_load_hook; |
289 inline static void set_should_post_class_file_load_hook(bool on) { _should_post_class_file_load_hook = on; } | 315 inline static void set_should_post_class_file_load_hook(bool on) { _should_post_class_file_load_hook = on; } |
290 inline static bool should_post_class_file_load_hook() { return _should_post_class_file_load_hook; } | 316 inline static bool should_post_class_file_load_hook() { |
317 JVMTI_ONLY(return _should_post_class_file_load_hook); | |
318 NOT_JVMTI(return false;) | |
319 } | |
291 static void post_class_file_load_hook(Symbol* h_name, Handle class_loader, | 320 static void post_class_file_load_hook(Symbol* h_name, Handle class_loader, |
292 Handle h_protection_domain, | 321 Handle h_protection_domain, |
293 unsigned char **data_ptr, unsigned char **end_ptr, | 322 unsigned char **data_ptr, unsigned char **end_ptr, |
294 unsigned char **cached_data_ptr, | 323 unsigned char **cached_data_ptr, |
295 jint *cached_length_ptr); | 324 jint *cached_length_ptr) NOT_JVMTI_RETURN; |
296 static void post_native_method_bind(Method* method, address* function_ptr) KERNEL_RETURN; | 325 static void post_native_method_bind(Method* method, address* function_ptr) NOT_JVMTI_RETURN; |
297 static void post_compiled_method_load(nmethod *nm) KERNEL_RETURN; | 326 static void post_compiled_method_load(nmethod *nm) NOT_JVMTI_RETURN; |
298 static void post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end) KERNEL_RETURN; | 327 static void post_dynamic_code_generated(const char *name, const void *code_begin, const void *code_end) NOT_JVMTI_RETURN; |
299 | 328 |
300 // used to post a CompiledMethodUnload event | 329 // used to post a CompiledMethodUnload event |
301 static void post_compiled_method_unload(jmethodID mid, const void *code_begin) KERNEL_RETURN; | 330 static void post_compiled_method_unload(jmethodID mid, const void *code_begin) NOT_JVMTI_RETURN; |
302 | 331 |
303 // similiar to post_dynamic_code_generated except that it can be used to | 332 // similiar to post_dynamic_code_generated except that it can be used to |
304 // post a DynamicCodeGenerated event while holding locks in the VM. Any event | 333 // post a DynamicCodeGenerated event while holding locks in the VM. Any event |
305 // posted using this function is recorded by the enclosing event collector | 334 // posted using this function is recorded by the enclosing event collector |
306 // -- JvmtiDynamicCodeEventCollector. | 335 // -- JvmtiDynamicCodeEventCollector. |
307 static void post_dynamic_code_generated_while_holding_locks(const char* name, address code_begin, address code_end) KERNEL_RETURN; | 336 static void post_dynamic_code_generated_while_holding_locks(const char* name, address code_begin, address code_end) NOT_JVMTI_RETURN; |
308 | 337 |
309 static void post_garbage_collection_finish() KERNEL_RETURN; | 338 static void post_garbage_collection_finish() NOT_JVMTI_RETURN; |
310 static void post_garbage_collection_start() KERNEL_RETURN; | 339 static void post_garbage_collection_start() NOT_JVMTI_RETURN; |
311 static void post_data_dump() KERNEL_RETURN; | 340 static void post_data_dump() NOT_JVMTI_RETURN; |
312 static void post_monitor_contended_enter(JavaThread *thread, ObjectMonitor *obj_mntr) KERNEL_RETURN; | 341 static void post_monitor_contended_enter(JavaThread *thread, ObjectMonitor *obj_mntr) NOT_JVMTI_RETURN; |
313 static void post_monitor_contended_entered(JavaThread *thread, ObjectMonitor *obj_mntr) KERNEL_RETURN; | 342 static void post_monitor_contended_entered(JavaThread *thread, ObjectMonitor *obj_mntr) NOT_JVMTI_RETURN; |
314 static void post_monitor_wait(JavaThread *thread, oop obj, jlong timeout) KERNEL_RETURN; | 343 static void post_monitor_wait(JavaThread *thread, oop obj, jlong timeout) NOT_JVMTI_RETURN; |
315 static void post_monitor_waited(JavaThread *thread, ObjectMonitor *obj_mntr, jboolean timed_out) KERNEL_RETURN; | 344 static void post_monitor_waited(JavaThread *thread, ObjectMonitor *obj_mntr, jboolean timed_out) NOT_JVMTI_RETURN; |
316 static void post_object_free(JvmtiEnv* env, jlong tag) KERNEL_RETURN; | 345 static void post_object_free(JvmtiEnv* env, jlong tag) NOT_JVMTI_RETURN; |
317 static void post_resource_exhausted(jint resource_exhausted_flags, const char* detail) KERNEL_RETURN; | 346 static void post_resource_exhausted(jint resource_exhausted_flags, const char* detail) NOT_JVMTI_RETURN; |
318 static void record_vm_internal_object_allocation(oop object) KERNEL_RETURN; | 347 static void record_vm_internal_object_allocation(oop object) NOT_JVMTI_RETURN; |
319 // Post objects collected by vm_object_alloc_event_collector. | 348 // Post objects collected by vm_object_alloc_event_collector. |
320 static void post_vm_object_alloc(JavaThread *thread, oop object) KERNEL_RETURN; | 349 static void post_vm_object_alloc(JavaThread *thread, oop object) NOT_JVMTI_RETURN; |
321 // Collects vm internal objects for later event posting. | 350 // Collects vm internal objects for later event posting. |
322 inline static void vm_object_alloc_event_collector(oop object) { | 351 inline static void vm_object_alloc_event_collector(oop object) { |
323 if (should_post_vm_object_alloc()) { | 352 if (should_post_vm_object_alloc()) { |
324 record_vm_internal_object_allocation(object); | 353 record_vm_internal_object_allocation(object); |
325 } | 354 } |
329 post_resource_exhausted(JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR, | 358 post_resource_exhausted(JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR, |
330 "Requested array size exceeds VM limit"); | 359 "Requested array size exceeds VM limit"); |
331 } | 360 } |
332 } | 361 } |
333 | 362 |
334 static void cleanup_thread (JavaThread* thread) KERNEL_RETURN; | 363 static void cleanup_thread (JavaThread* thread) NOT_JVMTI_RETURN; |
335 | 364 |
336 static void oops_do(OopClosure* f) KERNEL_RETURN; | 365 static void oops_do(OopClosure* f) NOT_JVMTI_RETURN; |
337 static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) KERNEL_RETURN; | 366 static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN; |
338 static void gc_epilogue() KERNEL_RETURN; | 367 static void gc_epilogue() NOT_JVMTI_RETURN; |
339 | 368 |
340 static void transition_pending_onload_raw_monitors() KERNEL_RETURN; | 369 static void transition_pending_onload_raw_monitors() NOT_JVMTI_RETURN; |
341 | 370 |
342 #ifndef SERVICES_KERNEL | |
343 // attach support | 371 // attach support |
344 static jint load_agent_library(AttachOperation* op, outputStream* out); | 372 static jint load_agent_library(AttachOperation* op, outputStream* out) NOT_JVMTI_RETURN_(JNI_ERR); |
345 #endif // SERVICES_KERNEL | |
346 | 373 |
347 // SetNativeMethodPrefix support | 374 // SetNativeMethodPrefix support |
348 static char** get_all_native_method_prefixes(int* count_ptr); | 375 static char** get_all_native_method_prefixes(int* count_ptr) NOT_JVMTI_RETURN_(NULL); |
349 }; | 376 }; |
350 | 377 |
351 // Support class used by JvmtiDynamicCodeEventCollector and others. It | 378 // Support class used by JvmtiDynamicCodeEventCollector and others. It |
352 // describes a single code blob by name and address range. | 379 // describes a single code blob by name and address range. |
353 class JvmtiCodeBlobDesc : public CHeapObj<mtInternal> { | 380 class JvmtiCodeBlobDesc : public CHeapObj<mtInternal> { |
406 | 433 |
407 friend class JvmtiExport; | 434 friend class JvmtiExport; |
408 void register_stub(const char* name, address start, address end); | 435 void register_stub(const char* name, address start, address end); |
409 | 436 |
410 public: | 437 public: |
411 JvmtiDynamicCodeEventCollector() KERNEL_RETURN; | 438 JvmtiDynamicCodeEventCollector() NOT_JVMTI_RETURN; |
412 ~JvmtiDynamicCodeEventCollector() KERNEL_RETURN; | 439 ~JvmtiDynamicCodeEventCollector() NOT_JVMTI_RETURN; |
413 bool is_dynamic_code_event() { return true; } | 440 bool is_dynamic_code_event() { return true; } |
414 | 441 |
415 }; | 442 }; |
416 | 443 |
417 // Used to record vm internally allocated object oops and post | 444 // Used to record vm internally allocated object oops and post |
439 | 466 |
440 //GC support | 467 //GC support |
441 static void oops_do_for_all_threads(OopClosure* f); | 468 static void oops_do_for_all_threads(OopClosure* f); |
442 | 469 |
443 public: | 470 public: |
444 JvmtiVMObjectAllocEventCollector() KERNEL_RETURN; | 471 JvmtiVMObjectAllocEventCollector() NOT_JVMTI_RETURN; |
445 ~JvmtiVMObjectAllocEventCollector() KERNEL_RETURN; | 472 ~JvmtiVMObjectAllocEventCollector() NOT_JVMTI_RETURN; |
446 bool is_vm_object_alloc_event() { return true; } | 473 bool is_vm_object_alloc_event() { return true; } |
447 | 474 |
448 bool is_enabled() { return _enable; } | 475 bool is_enabled() { return _enable; } |
449 void set_enabled(bool on) { _enable = on; } | 476 void set_enabled(bool on) { _enable = on; } |
450 }; | 477 }; |
470 JvmtiVMObjectAllocEventCollector *_collector; | 497 JvmtiVMObjectAllocEventCollector *_collector; |
471 | 498 |
472 bool was_enabled() { return _collector != NULL; } | 499 bool was_enabled() { return _collector != NULL; } |
473 | 500 |
474 public: | 501 public: |
475 NoJvmtiVMObjectAllocMark() KERNEL_RETURN; | 502 NoJvmtiVMObjectAllocMark() NOT_JVMTI_RETURN; |
476 ~NoJvmtiVMObjectAllocMark() KERNEL_RETURN; | 503 ~NoJvmtiVMObjectAllocMark() NOT_JVMTI_RETURN; |
477 }; | 504 }; |
478 | 505 |
479 | 506 |
480 // Base class for reporting GC events to JVMTI. | 507 // Base class for reporting GC events to JVMTI. |
481 class JvmtiGCMarker : public StackObj { | 508 class JvmtiGCMarker : public StackObj { |
482 public: | 509 public: |
483 JvmtiGCMarker() KERNEL_RETURN; | 510 JvmtiGCMarker() NOT_JVMTI_RETURN; |
484 ~JvmtiGCMarker() KERNEL_RETURN; | 511 ~JvmtiGCMarker() NOT_JVMTI_RETURN; |
485 }; | 512 }; |
486 | 513 |
487 // JvmtiHideSingleStepping is a helper class for hiding | 514 // JvmtiHideSingleStepping is a helper class for hiding |
488 // internal single step events. | 515 // internal single step events. |
489 class JvmtiHideSingleStepping : public StackObj { | 516 class JvmtiHideSingleStepping : public StackObj { |