139 KlassHandle field_klass, Handle object, jfieldID field, |
139 KlassHandle field_klass, Handle object, jfieldID field, |
140 char sig_type, jvalue *value); |
140 char sig_type, jvalue *value); |
141 |
141 |
142 |
142 |
143 private: |
143 private: |
144 // CompiledMethodUnload events are reported from the VM thread so they |
|
145 // are collected in lists (of jmethodID/addresses) and the events are posted later |
|
146 // from threads posting CompieldMethodLoad or DynamicCodeGenerated events. |
|
147 static bool _have_pending_compiled_method_unload_events; |
|
148 static GrowableArray<jmethodID>* _pending_compiled_method_unload_method_ids; |
|
149 static GrowableArray<const void *>* _pending_compiled_method_unload_code_begins; |
|
150 static JavaThread* _current_poster; |
|
151 |
|
152 // tests if there are CompiledMethodUnload events pending |
|
153 inline static bool have_pending_compiled_method_unload_events() { |
|
154 return _have_pending_compiled_method_unload_events; |
|
155 } |
|
156 |
|
157 // posts any pending CompiledMethodUnload events. |
|
158 static void post_pending_compiled_method_unload_events(); |
|
159 |
|
160 // Perform the actual notification to interested JvmtiEnvs. |
|
161 static void post_compiled_method_unload_internal(JavaThread* self, jmethodID mid, const void* code_begin); |
|
162 |
|
163 // posts a DynamicCodeGenerated event (internal/private implementation). |
144 // posts a DynamicCodeGenerated event (internal/private implementation). |
164 // The public post_dynamic_code_generated* functions make use of the |
145 // The public post_dynamic_code_generated* functions make use of the |
165 // internal implementation. |
146 // internal implementation. |
166 static void post_dynamic_code_generated_internal(const char *name, const void *code_begin, const void *code_end) KERNEL_RETURN; |
147 static void post_dynamic_code_generated_internal(const char *name, const void *code_begin, const void *code_end) KERNEL_RETURN; |
167 |
148 |
254 int * micro); |
235 int * micro); |
255 |
236 |
256 // single stepping management methods |
237 // single stepping management methods |
257 static void at_single_stepping_point(JavaThread *thread, methodOop method, address location) KERNEL_RETURN; |
238 static void at_single_stepping_point(JavaThread *thread, methodOop method, address location) KERNEL_RETURN; |
258 static void expose_single_stepping(JavaThread *thread) KERNEL_RETURN; |
239 static void expose_single_stepping(JavaThread *thread) KERNEL_RETURN; |
259 static bool hide_single_stepping(JavaThread *thread) KERNEL_RETURN_(return false;); |
240 static bool hide_single_stepping(JavaThread *thread) KERNEL_RETURN_(false); |
260 |
241 |
261 // Methods that notify the debugger that something interesting has happened in the VM. |
242 // Methods that notify the debugger that something interesting has happened in the VM. |
262 static void post_vm_start (); |
243 static void post_vm_start (); |
263 static void post_vm_initialized (); |
244 static void post_vm_initialized (); |
264 static void post_vm_death (); |
245 static void post_vm_death (); |
269 static void post_exception_throw (JavaThread *thread, methodOop method, address location, oop exception) KERNEL_RETURN; |
250 static void post_exception_throw (JavaThread *thread, methodOop method, address location, oop exception) KERNEL_RETURN; |
270 static void notice_unwind_due_to_exception (JavaThread *thread, methodOop method, address location, oop exception, bool in_handler_frame) KERNEL_RETURN; |
251 static void notice_unwind_due_to_exception (JavaThread *thread, methodOop method, address location, oop exception, bool in_handler_frame) KERNEL_RETURN; |
271 |
252 |
272 static oop jni_GetField_probe (JavaThread *thread, jobject jobj, |
253 static oop jni_GetField_probe (JavaThread *thread, jobject jobj, |
273 oop obj, klassOop klass, jfieldID fieldID, bool is_static) |
254 oop obj, klassOop klass, jfieldID fieldID, bool is_static) |
274 KERNEL_RETURN_(return NULL;); |
255 KERNEL_RETURN_(NULL); |
275 static oop jni_GetField_probe_nh (JavaThread *thread, jobject jobj, |
256 static oop jni_GetField_probe_nh (JavaThread *thread, jobject jobj, |
276 oop obj, klassOop klass, jfieldID fieldID, bool is_static) |
257 oop obj, klassOop klass, jfieldID fieldID, bool is_static) |
277 KERNEL_RETURN_(return NULL;); |
258 KERNEL_RETURN_(NULL); |
278 static void post_field_access_by_jni (JavaThread *thread, oop obj, |
259 static void post_field_access_by_jni (JavaThread *thread, oop obj, |
279 klassOop klass, jfieldID fieldID, bool is_static) KERNEL_RETURN; |
260 klassOop klass, jfieldID fieldID, bool is_static) KERNEL_RETURN; |
280 static void post_field_access (JavaThread *thread, methodOop method, |
261 static void post_field_access (JavaThread *thread, methodOop method, |
281 address location, KlassHandle field_klass, Handle object, jfieldID field) KERNEL_RETURN; |
262 address location, KlassHandle field_klass, Handle object, jfieldID field) KERNEL_RETURN; |
282 static oop jni_SetField_probe (JavaThread *thread, jobject jobj, |
263 static oop jni_SetField_probe (JavaThread *thread, jobject jobj, |
283 oop obj, klassOop klass, jfieldID fieldID, bool is_static, char sig_type, |
264 oop obj, klassOop klass, jfieldID fieldID, bool is_static, char sig_type, |
284 jvalue *value) KERNEL_RETURN_(return NULL;); |
265 jvalue *value) KERNEL_RETURN_(NULL); |
285 static oop jni_SetField_probe_nh (JavaThread *thread, jobject jobj, |
266 static oop jni_SetField_probe_nh (JavaThread *thread, jobject jobj, |
286 oop obj, klassOop klass, jfieldID fieldID, bool is_static, char sig_type, |
267 oop obj, klassOop klass, jfieldID fieldID, bool is_static, char sig_type, |
287 jvalue *value) KERNEL_RETURN_(return NULL;); |
268 jvalue *value) KERNEL_RETURN_(NULL); |
288 static void post_field_modification_by_jni(JavaThread *thread, oop obj, |
269 static void post_field_modification_by_jni(JavaThread *thread, oop obj, |
289 klassOop klass, jfieldID fieldID, bool is_static, char sig_type, |
270 klassOop klass, jfieldID fieldID, bool is_static, char sig_type, |
290 jvalue *value); |
271 jvalue *value); |
291 static void post_raw_field_modification(JavaThread *thread, methodOop method, |
272 static void post_raw_field_modification(JavaThread *thread, methodOop method, |
292 address location, KlassHandle field_klass, Handle object, jfieldID field, |
273 address location, KlassHandle field_klass, Handle object, jfieldID field, |