hotspot/src/share/vm/prims/jvmtiExport.hpp
changeset 8110 c992c8d52344
parent 8076 96d498ec7ae1
child 8475 c2b97a27943a
equal deleted inserted replaced
8109:26c288ddbec3 8110:c992c8d52344
     1 /*
     1 /*
     2  * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   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,