Added missing files to JavaOpenJPEG project (files from Patrick Piscaglia)
[openjpeg.git] / JavaOpenJPEG / java-jni / include / jvmdi.h
diff --git a/JavaOpenJPEG/java-jni/include/jvmdi.h b/JavaOpenJPEG/java-jni/include/jvmdi.h
new file mode 100644 (file)
index 0000000..d39c4a9
--- /dev/null
@@ -0,0 +1,1012 @@
+/*\r
+ * @(#)jvmdi.h 1.48 03/12/19\r
+ *\r
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.\r
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\r
+ */\r
+\r
+/*\r
+ *   Java Virtual Machine Debug Interface\r
+ *\r
+ *   Defines debugging functionality that a VM should provide.  \r
+ *\r
+ *   Should not overlap functionality in jni.h\r
+ */\r
+\r
+#ifndef _JAVASOFT_JVMDI_H_\r
+#define _JAVASOFT_JVMDI_H_\r
+\r
+#include "jni.h"\r
+\r
+#define JVMDI_VERSION_1    0x20010000\r
+#define JVMDI_VERSION_1_1  0x20010001\r
+#define JVMDI_VERSION_1_2  0x20010002\r
+#define JVMDI_VERSION_1_3  0x20010003\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+typedef jobject jthread;\r
+\r
+typedef jobject jthreadGroup;\r
+\r
+struct _jframeID;\r
+typedef struct _jframeID *jframeID;\r
+\r
+  /* specifies program location "pc" - often byte code index */\r
+typedef jlong jlocation;\r
+\r
+  /* The jmethodID for methods that have been replaced */\r
+  /* via RedefineClasses - used when the implementation */\r
+  /* does not wish to retain replaced jmethodIDs */\r
+#define OBSOLETE_METHOD_ID ((jmethodID)(NULL))\r
+\r
+  /*\r
+   *  Errors\r
+   */\r
+\r
+typedef jint jvmdiError;\r
+\r
+  /* no error */\r
+#define JVMDI_ERROR_NONE                 ((jvmdiError)0)\r
+\r
+  /*\r
+   * Errors on thread operations\r
+   */\r
+\r
+  /* invalid thread */\r
+#define JVMDI_ERROR_INVALID_THREAD       ((jvmdiError)10)\r
+  /* invalid thread group */\r
+#define JVMDI_ERROR_INVALID_THREAD_GROUP ((jvmdiError)11)\r
+  /* invalid thread priority */\r
+#define JVMDI_ERROR_INVALID_PRIORITY     ((jvmdiError)12)\r
+  /* thread not suspended */\r
+#define JVMDI_ERROR_THREAD_NOT_SUSPENDED ((jvmdiError)13)\r
+  /* thread already suspended */\r
+#define JVMDI_ERROR_THREAD_SUSPENDED     ((jvmdiError)14)\r
+\r
+  /* \r
+   * Errors on object and class operations\r
+   */\r
+\r
+  /* invalid object (implementation not required to gracefully catch) */\r
+#define JVMDI_ERROR_INVALID_OBJECT       ((jvmdiError)20)\r
+  /* invalid class (implementation not required to gracefully catch) */\r
+#define JVMDI_ERROR_INVALID_CLASS        ((jvmdiError)21)\r
+  /* class not prepared */\r
+#define JVMDI_ERROR_CLASS_NOT_PREPARED   ((jvmdiError)22)\r
+  /* invalid methodID (implementation not required to gracefully catch) */\r
+#define JVMDI_ERROR_INVALID_METHODID     ((jvmdiError)23)\r
+  /* invalid location */\r
+#define JVMDI_ERROR_INVALID_LOCATION     ((jvmdiError)24)\r
+  /* invalid fieldID (implementation not required to gracefully catch) */\r
+#define JVMDI_ERROR_INVALID_FIELDID      ((jvmdiError)25)\r
+\r
+  /*\r
+   * Errors on frame operations\r
+   */\r
+\r
+  /* invalid frameID (implementation not required to gracefully catch) */\r
+#define JVMDI_ERROR_INVALID_FRAMEID      ((jvmdiError)30)\r
+  /* there are no more frames on the stack */\r
+#define JVMDI_ERROR_NO_MORE_FRAMES       ((jvmdiError)31)\r
+  /* operation cannot be performed on this frame */\r
+#define JVMDI_ERROR_OPAQUE_FRAME         ((jvmdiError)32)\r
+  /* operation can only be performed on current frame */\r
+#define JVMDI_ERROR_NOT_CURRENT_FRAME    ((jvmdiError)33)\r
+  /* type mismatch (implementation not required to gracefully catch) */\r
+#define JVMDI_ERROR_TYPE_MISMATCH        ((jvmdiError)34)\r
+  /* invalid slot */\r
+#define JVMDI_ERROR_INVALID_SLOT         ((jvmdiError)35)\r
+\r
+  /*\r
+   * Errors on set/clear/find operations\r
+   */\r
+\r
+  /* item already present */\r
+#define JVMDI_ERROR_DUPLICATE            ((jvmdiError)40)\r
+  /* item not found */\r
+#define JVMDI_ERROR_NOT_FOUND            ((jvmdiError)41)\r
+\r
+  /*\r
+   * Errors on monitor operations\r
+   */\r
+\r
+  /* invalid monitor */\r
+#define JVMDI_ERROR_INVALID_MONITOR      ((jvmdiError)50)\r
+  /* wait, notify, notify all tried without entering monitor  */\r
+#define JVMDI_ERROR_NOT_MONITOR_OWNER    ((jvmdiError)51)\r
+  /* waiting thread interrupted */\r
+#define JVMDI_ERROR_INTERRUPT            ((jvmdiError)52)\r
+  \r
+  /*\r
+   * Class redefinition / operand stack errors\r
+   */\r
+\r
+  /* The equivalent of ClassFormatError */\r
+#define JVMDI_ERROR_INVALID_CLASS_FORMAT          ((jvmdiError)60)\r
+  /* The equivalent of ClassCircularityError */\r
+#define JVMDI_ERROR_CIRCULAR_CLASS_DEFINITION     ((jvmdiError)61)\r
+  /* The class bytes fail verification */\r
+#define JVMDI_ERROR_FAILS_VERIFICATION            ((jvmdiError)62)\r
+  /* The new class version adds new methods */\r
+  /* and can_add_method is false */\r
+#define JVMDI_ERROR_ADD_METHOD_NOT_IMPLEMENTED    ((jvmdiError)63)\r
+  /* The new class version changes fields */ \r
+  /* and can_unrestrictedly_redefine_classes is false */\r
+#define JVMDI_ERROR_SCHEMA_CHANGE_NOT_IMPLEMENTED ((jvmdiError)64)\r
+  /* bci/operand stack/local var combination is not verifiably */\r
+  /* type safe */\r
+#define JVMDI_ERROR_INVALID_TYPESTATE             ((jvmdiError)65)\r
+  /* A direct superclass is different for the new class */\r
+  /* version, or the set of directly implemented */\r
+  /* interfaces is different */\r
+  /* and can_unrestrictedly_redefine_classes is false */\r
+#define JVMDI_ERROR_HIERARCHY_CHANGE_NOT_IMPLEMENTED ((jvmdiError)66)\r
+  /* The new class version does not declare a method */\r
+  /* declared in the old class version */\r
+  /* and can_unrestrictedly_redefine_classes is false */\r
+#define JVMDI_ERROR_DELETE_METHOD_NOT_IMPLEMENTED ((jvmdiError)67)\r
+  /* A class file has a version number not supported */\r
+  /* by this VM. */\r
+#define JVMDI_ERROR_UNSUPPORTED_VERSION           ((jvmdiError)68)\r
+  /* The class name defined in the new class file is */\r
+  /* different from the name in the old class object */\r
+#define JVMDI_ERROR_NAMES_DONT_MATCH              ((jvmdiError)69)\r
+  /* The new class version has different modifiers and */\r
+  /* can_unrestrictedly_redefine_classes is false */\r
+#define JVMDI_ERROR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED   ((jvmdiError)70)\r
+  /* A method in the new class version has different modifiers */\r
+  /* than its counterpart in the old class version */\r
+  /* and can_unrestrictedly_redefine_classes is false */\r
+#define JVMDI_ERROR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED  ((jvmdiError)71)\r
+\r
+  /*\r
+   * Miscellaneous errors\r
+   */\r
+\r
+  /* Not yet implemented */\r
+#define JVMDI_ERROR_NOT_IMPLEMENTED      ((jvmdiError)99)\r
+  /* null pointer */\r
+#define JVMDI_ERROR_NULL_POINTER         ((jvmdiError)100)\r
+  /* information is absent */\r
+#define JVMDI_ERROR_ABSENT_INFORMATION   ((jvmdiError)101)\r
+  /* invalid event type  */\r
+#define JVMDI_ERROR_INVALID_EVENT_TYPE   ((jvmdiError)102)\r
+  /* invalid argument  */\r
+#define JVMDI_ERROR_ILLEGAL_ARGUMENT     ((jvmdiError)103)\r
+\r
+  /*\r
+   * Universal errors. These errors may be returned by\r
+   * any JVMDI function, not just the ones for which they are listed\r
+   * below.\r
+   */\r
+\r
+  /* no more memory available for allocation */\r
+#define JVMDI_ERROR_OUT_OF_MEMORY        ((jvmdiError)110)\r
+  /* debugging has not been enabled in this VM */\r
+#define JVMDI_ERROR_ACCESS_DENIED        ((jvmdiError)111)\r
+  /* VM is dead (implementation not required to gracefully catch) */\r
+#define JVMDI_ERROR_VM_DEAD              ((jvmdiError)112)\r
+  /* internal error  */\r
+#define JVMDI_ERROR_INTERNAL             ((jvmdiError)113)\r
+  /* Thread calling JVMDI function not attached to VM */\r
+#define JVMDI_ERROR_UNATTACHED_THREAD    ((jvmdiError)115)\r
+\r
+\r
+  /*\r
+   *  Threads\r
+   */\r
+\r
+  /* Thread status is unknown */\r
+#define JVMDI_THREAD_STATUS_UNKNOWN      ((jint)-1)\r
+  /* Thread is waiting to die */\r
+#define JVMDI_THREAD_STATUS_ZOMBIE       ((jint)0)\r
+  /* Thread is runnable */\r
+#define JVMDI_THREAD_STATUS_RUNNING      ((jint)1)\r
+  /* Thread is sleeping - Thread.sleep() or JVM_Sleep() was called */\r
+#define JVMDI_THREAD_STATUS_SLEEPING     ((jint)2)\r
+  /* Thread is waiting on a java monitor */\r
+#define JVMDI_THREAD_STATUS_MONITOR      ((jint)3)\r
+  /* Thread is waiting - Thread.wait() or JVM_MonitorWait() was called */\r
+#define JVMDI_THREAD_STATUS_WAIT         ((jint)4)\r
+\r
+  /* Thread is suspended - Thread.suspend(), JVM_Suspend() or\r
+   * JVMDI_Suspend was called */\r
+#define JVMDI_SUSPEND_STATUS_SUSPENDED   ((jint)0x1)\r
+  /* Thread is at a breakpoint */\r
+#define JVMDI_SUSPEND_STATUS_BREAK       ((jint)0x2)\r
+\r
+\r
+  /* Thread priority constants */\r
+#define JVMDI_THREAD_MIN_PRIORITY   ((jint)1)\r
+#define JVMDI_THREAD_NORM_PRIORITY  ((jint)5)\r
+#define JVMDI_THREAD_MAX_PRIORITY   ((jint)10)\r
+\r
+typedef struct {\r
+    char *name;\r
+    jint  priority;\r
+    jboolean is_daemon;\r
+    jthreadGroup thread_group;\r
+    jobject context_class_loader;\r
+} JVMDI_thread_info;\r
+\r
+typedef struct {\r
+    jthreadGroup parent;\r
+    char *name;\r
+    jint  max_priority;\r
+    jboolean is_daemon;\r
+} JVMDI_thread_group_info;\r
+\r
+#define JVMDI_DISABLE ((jint) 0)\r
+#define JVMDI_ENABLE  ((jint) 1)\r
+\r
+/*\r
+ * Initial function for debug threads created through JVMDI\r
+ */\r
+typedef void (*JVMDI_StartFunction)(void *);\r
+\r
+/*\r
+ * Type for debug monitors created through JVMDI\r
+ */\r
+typedef void *JVMDI_RawMonitor;\r
+\r
+#define JVMDI_MONITOR_WAIT_FOREVER ((jlong)(-1))\r
+\r
+/*\r
+ * Monitor information\r
+ */\r
+typedef struct {\r
+    jthread owner;\r
+    jint entry_count;\r
+    jint waiter_count;\r
+    jthread *waiters;\r
+} JVMDI_monitor_info;\r
+\r
+typedef struct {\r
+    jint owned_monitor_count;\r
+    jobject *owned_monitors;\r
+} JVMDI_owned_monitor_info;\r
+\r
+  /*\r
+   *  Events\r
+   */\r
+\r
+    /* kind = JVMDI_EVENT_SINGLE_STEP */\r
+    typedef struct { \r
+        jthread thread;\r
+        jclass clazz;\r
+        jmethodID method;\r
+        jlocation location;\r
+    } JVMDI_single_step_event_data;\r
+                       \r
+    /* kind = JVMDI_EVENT_BREAKPOINT */\r
+    typedef struct { \r
+        jthread thread;\r
+        jclass clazz;\r
+        jmethodID method;\r
+        jlocation location;\r
+    } JVMDI_breakpoint_event_data;\r
+    \r
+    /* kind = JVMDI_EVENT_FIELD_ACCESS */\r
+    typedef struct { \r
+        jthread thread;\r
+        jclass clazz;\r
+        jmethodID method;\r
+        jlocation location;\r
+        jclass field_clazz;\r
+        jobject object;\r
+        jfieldID field;\r
+    } JVMDI_field_access_event_data;\r
+    \r
+    /* kind = JVMDI_EVENT_FIELD_MODIFICATION */\r
+    typedef struct { \r
+        jthread thread;\r
+        jclass clazz;\r
+        jmethodID method;\r
+        jlocation location;\r
+        jclass field_clazz;\r
+        jobject object;\r
+        jfieldID field;\r
+        char signature_type;\r
+        jvalue new_value;\r
+    } JVMDI_field_modification_event_data;\r
+    \r
+    /* kind = JVMDI_EVENT_FRAME_POP */\r
+    /* kind = JVMDI_EVENT_METHOD_ENTRY */\r
+    /* kind = JVMDI_EVENT_METHOD_EXIT */\r
+    typedef struct { \r
+        jthread thread;\r
+        jclass clazz;\r
+        jmethodID method;\r
+        jframeID frame;\r
+    } JVMDI_frame_event_data;\r
+    \r
+    /* kind = JVMDI_EVENT_EXCEPTION */\r
+    typedef struct { \r
+        jthread thread;\r
+        jclass clazz;\r
+        jmethodID method;\r
+        jlocation location;\r
+        jobject exception;\r
+        jclass catch_clazz;\r
+        jmethodID catch_method;\r
+        jlocation catch_location;\r
+    } JVMDI_exception_event_data;\r
+    \r
+    /* kind = JVMDI_EVENT_EXCEPTION_CATCH */\r
+    typedef struct { \r
+        jthread thread;\r
+        jclass clazz;\r
+        jmethodID method;\r
+        jlocation location;\r
+        jobject exception;\r
+    } JVMDI_exception_catch_event_data;\r
+    \r
+    /* kind = JVMDI_EVENT_USER_DEFINED */\r
+    typedef struct { \r
+        jobject object;\r
+        jint key;\r
+    } JVMDI_user_event_data;\r
+    \r
+    /* kind = JVMDI_EVENT_THREAD_END or */\r
+    /* JVMDI_EVENT_THREAD_START */\r
+    typedef struct { \r
+        jthread thread;\r
+    } JVMDI_thread_change_event_data;\r
+    \r
+    /* kind = JVMDI_EVENT_CLASS_LOAD, */\r
+    /* JVMDI_EVENT_CLASS_UNLOAD, or */\r
+    /* JVMDI_EVENT_CLASS_PREPARE */\r
+    typedef struct { \r
+        jthread thread;\r
+        jclass clazz;\r
+    } JVMDI_class_event_data;\r
+    \r
+/* This stucture passes information about the event.\r
+ * location is the index of the last instruction executed. \r
+ */\r
+typedef struct {\r
+    jint kind;         /* the discriminant */\r
+\r
+    union {\r
+       /* kind = JVMDI_EVENT_SINGLE_STEP */\r
+        JVMDI_single_step_event_data single_step;\r
+                       \r
+        /* kind = JVMDI_EVENT_BREAKPOINT */\r
+        JVMDI_breakpoint_event_data breakpoint;\r
+\r
+        /* kind = JVMDI_EVENT_FRAME_POP */\r
+        /* kind = JVMDI_EVENT_METHOD_ENTRY */\r
+        /* kind = JVMDI_EVENT_METHOD_EXIT */\r
+        JVMDI_frame_event_data frame;\r
+\r
+        /* kind = JVMDI_EVENT_FIELD_ACCESS */\r
+        JVMDI_field_access_event_data field_access;\r
+\r
+        /* kind = JVMDI_EVENT_FIELD_MODIFICATION */\r
+        JVMDI_field_modification_event_data field_modification;\r
+\r
+        /* kind = JVMDI_EVENT_EXCEPTION */\r
+        JVMDI_exception_event_data exception;\r
+\r
+        /* kind = JVMDI_EVENT_EXCEPTION_CATCH */\r
+        JVMDI_exception_catch_event_data exception_catch;\r
+\r
+        /* kind = JVMDI_EVENT_USER_DEFINED */\r
+        JVMDI_user_event_data user;\r
+                       \r
+        /* kind = JVMDI_EVENT_THREAD_END or */\r
+        /* JVMDI_EVENT_THREAD_START */\r
+        JVMDI_thread_change_event_data thread_change;\r
+                       \r
+        /* kind = JVMDI_EVENT_CLASS_LOAD, */\r
+        /* JVMDI_EVENT_CLASS_UNLOAD, or */\r
+        /* JVMDI_EVENT_CLASS_PREPARE */\r
+        JVMDI_class_event_data class_event;\r
+                       \r
+        /* kind = JVMDI_EVENT_VM_DEATH, JVMDI_EVENT_VM_INIT */\r
+        /* no additional fields */             \r
+    } u;\r
+} JVMDI_Event;\r
+\r
+       /*** event kinds ***/\r
+#define JVMDI_EVENT_SINGLE_STEP   ((jint)1)\r
+#define JVMDI_EVENT_BREAKPOINT    ((jint)2)\r
+#define JVMDI_EVENT_FRAME_POP     ((jint)3)\r
+#define JVMDI_EVENT_EXCEPTION     ((jint)4)\r
+#define JVMDI_EVENT_USER_DEFINED  ((jint)5)\r
+#define JVMDI_EVENT_THREAD_START  ((jint)6)\r
+#define JVMDI_EVENT_THREAD_END    ((jint)7)\r
+#define JVMDI_EVENT_CLASS_PREPARE ((jint)8)\r
+#define JVMDI_EVENT_CLASS_UNLOAD  ((jint)9)\r
+#define JVMDI_EVENT_CLASS_LOAD    ((jint)10)\r
+#define JVMDI_EVENT_FIELD_ACCESS       ((jint)20)\r
+#define JVMDI_EVENT_FIELD_MODIFICATION ((jint)21)\r
+#define JVMDI_EVENT_EXCEPTION_CATCH    ((jint)30)\r
+#define JVMDI_EVENT_METHOD_ENTRY       ((jint)40)\r
+#define JVMDI_EVENT_METHOD_EXIT        ((jint)41)\r
+#define JVMDI_EVENT_VM_INIT            ((jint)90)\r
+#define JVMDI_EVENT_VM_DEATH           ((jint)99)\r
+\r
+#define JVMDI_MAX_EVENT_TYPE_VAL       ((jint)99)\r
+\r
+\r
+\r
+/* event handler hook */\r
+typedef void (*JVMDI_EventHook)(JNIEnv *env, JVMDI_Event *event);\r
+\r
+typedef jvmdiError (*JVMDI_AllocHook) (jlong size, jbyte** memPtr);\r
+typedef jvmdiError (*JVMDI_DeallocHook) (jbyte* buffer);\r
+\r
+/*\r
+ * Class states used in JVMDI_GetClassStatus\r
+ */\r
+#define JVMDI_CLASS_STATUS_VERIFIED          ((jint)0x01)\r
+#define JVMDI_CLASS_STATUS_PREPARED          ((jint)0x02)\r
+#define JVMDI_CLASS_STATUS_INITIALIZED       ((jint)0x04)\r
+ /* Error prevents initialization */\r
+#define JVMDI_CLASS_STATUS_ERROR             ((jint)0x08) \r
+\r
+/* structure for returning line number information \r
+ */\r
+typedef struct {\r
+    jlocation start_location;\r
+    jint line_number;\r
+} JVMDI_line_number_entry;\r
+\r
+\r
+/* structure for returning local variable information \r
+ */\r
+typedef struct {\r
+    jlocation start_location;   /* variable valid start_location */\r
+    jint length;                /* upto start_location+length */ \r
+    char *name;                 /* name in UTF8 */\r
+    char *signature;            /* type signature in UTF8 */\r
+    jint slot;                  /* variable slot, see JVMDI_GetLocal*()  */\r
+} JVMDI_local_variable_entry;\r
+\r
+/* structure for returning exception handler information \r
+ */\r
+typedef struct {\r
+    jlocation start_location;\r
+    jlocation end_location;\r
+    jlocation handler_location;\r
+    jclass exception;           /* if null, all exceptions */\r
+} JVMDI_exception_handler_entry;\r
+\r
+#define JVMDI_OPERAND_TYPE_REFERENCE      ((jint)1)\r
+#define JVMDI_OPERAND_TYPE_INT            ((jint)2)\r
+#define JVMDI_OPERAND_TYPE_FLOAT          ((jint)3)\r
+#define JVMDI_OPERAND_TYPE_LONG0          ((jint)4) /* least sig. 32 bits */\r
+#define JVMDI_OPERAND_TYPE_LONG1          ((jint)5) /* most sig. 32 bits */\r
+#define JVMDI_OPERAND_TYPE_DOUBLE0        ((jint)6) /* least sig. 32 bits */\r
+#define JVMDI_OPERAND_TYPE_DOUBLE1        ((jint)7) /* most sig. 32 bits */\r
+#define JVMDI_OPERAND_TYPE_RETURN_ADDRESS ((jint)8)\r
+\r
+typedef struct {\r
+    jint word;                 /* 32 bit operand stack quantities */\r
+    jint type;                 /* type encoding of the operand word */\r
+                               /* one of JVMDI_OPERAND_TYPE_* */\r
+} JVMDI_operand_stack_element;\r
+\r
+typedef struct { \r
+    jint instance_field_count; /* number of instance fields referencing obj */\r
+    struct JVMDI_instance_field {\r
+        jobject instance;      /* instance referencing obj */\r
+        jfieldID field;        /* field holding reference */\r
+    } *instance_fields;        /* instanceField_count of them */\r
+     \r
+    jint static_field_count;   /* number of static fields referencing obj */\r
+    struct JVMDI_static_field {\r
+        jclass clazz;          /* class referencing obj */\r
+        jfieldID static_field; /* field holding reference */\r
+    } *static_fields;          /* static_field_count of them */\r
+    \r
+    jint array_element_count;  /* number of array elements referencing obj */\r
+    struct JVMDI_array_element {\r
+        jobjectArray array;    /* array referencing obj */\r
+        jint index;            /* index holding reference */\r
+    } *array_elements;         /* array_element_count of them */\r
+    \r
+    jint frame_slot_count;     /* number of frame slots referencing obj */\r
+    struct JVMDI_frame_slot {\r
+        jthread thread;        /* thread of the frame */\r
+        jframeID frame;        /* frame referencing obj */\r
+        jint slot;             /* slot holding reference */\r
+    } *frame_slots;            /* frame_slot_count of them */\r
+} JVMDI_object_reference_info;\r
+\r
+/* structure for defining a class\r
+*/\r
+typedef struct {\r
+    jclass clazz;              /* Class object for this class */\r
+    jint class_byte_count;     /* number of bytes defining class (below) */\r
+    jbyte *class_bytes;        /* bytes defining class (in JVM spec */\r
+                               /* Class File Format) */\r
+} JVMDI_class_definition;\r
+\r
+  /* For backwards compatibility */\r
+#define can_change_schema can_unrestrictedly_redefine_classes\r
+\r
+typedef struct {\r
+    unsigned int can_watch_field_modification      : 1;\r
+    unsigned int can_watch_field_access            : 1;\r
+    unsigned int can_get_bytecodes                 : 1;\r
+    unsigned int can_get_synthetic_attribute       : 1;\r
+    unsigned int can_get_owned_monitor_info        : 1;\r
+    unsigned int can_get_current_contended_monitor : 1;\r
+    unsigned int can_get_monitor_info              : 1;\r
+    unsigned int can_get_heap_info                 : 1;\r
+    unsigned int can_get_operand_stack             : 1;\r
+    unsigned int can_set_operand_stack             : 1;\r
+    unsigned int can_pop_frame                     : 1;\r
+    unsigned int can_get_class_definition          : 1;\r
+    unsigned int can_redefine_classes              : 1; \r
+    unsigned int can_add_method                    : 1;\r
+    unsigned int can_unrestrictedly_redefine_classes : 1;\r
+    unsigned int can_suspend_resume_thread_lists   : 1;\r
+} JVMDI_capabilities;\r
+\r
+typedef struct JVMDI_Interface_1_ {\r
+    jvmdiError (JNICALL *SetEventHook)\r
+      (JVMDI_EventHook hook);\r
+    jvmdiError (JNICALL *SetEventNotificationMode)\r
+      (jint mode, jint eventType, jthread thread, ...);\r
+\r
+    jvmdiError (JNICALL *GetThreadStatus)\r
+      (jthread thread,\r
+       jint *threadStatusPtr, jint *suspendStatusPtr);\r
+    jvmdiError (JNICALL *GetAllThreads)\r
+      (jint *threadsCountPtr, jthread **threadsPtr);\r
+    jvmdiError (JNICALL *SuspendThread)\r
+      (jthread thread); \r
+    jvmdiError (JNICALL *ResumeThread)\r
+      (jthread thread);\r
+    jvmdiError (JNICALL *StopThread)\r
+      (jthread thread, jobject exception);\r
+    jvmdiError (JNICALL *InterruptThread)\r
+      (jthread thread);\r
+    jvmdiError (JNICALL *GetThreadInfo)\r
+      (jthread thread, JVMDI_thread_info *infoPtr);\r
+    jvmdiError (JNICALL *GetOwnedMonitorInfo)\r
+      (jthread thread, JVMDI_owned_monitor_info *infoPtr);\r
+    jvmdiError (JNICALL *GetCurrentContendedMonitor)\r
+      (jthread thread, jobject *monitor);\r
+    jvmdiError (JNICALL *RunDebugThread)\r
+      (jthread thread, JVMDI_StartFunction proc, void *arg,\r
+       int priority);\r
+\r
+    jvmdiError (JNICALL *GetTopThreadGroups)\r
+      (jint *groupCountPtr, jthreadGroup **groupsPtr);\r
+    jvmdiError (JNICALL *GetThreadGroupInfo)\r
+      (jthreadGroup group, JVMDI_thread_group_info *infoPtr);\r
+    jvmdiError (JNICALL *GetThreadGroupChildren)\r
+      (jthreadGroup group, \r
+       jint *threadCountPtr, jthread **threadsPtr,\r
+       jint *groupCountPtr, jthreadGroup **groupsPtr);\r
+\r
+    jvmdiError (JNICALL *GetFrameCount)\r
+      (jthread thread, jint *countPtr);\r
+    jvmdiError (JNICALL *GetCurrentFrame)\r
+      (jthread thread, jframeID *framePtr);\r
+    jvmdiError (JNICALL *GetCallerFrame)\r
+      (jframeID called, jframeID *framePtr);\r
+    jvmdiError (JNICALL *GetFrameLocation)\r
+      (jframeID frame, jclass *classPtr, jmethodID *methodPtr,\r
+       jlocation *locationPtr);\r
+    jvmdiError (JNICALL *NotifyFramePop)\r
+      (jframeID frame); \r
+    jvmdiError (JNICALL *GetLocalObject)\r
+      (jframeID frame, jint slot, jobject *valuePtr);\r
+    jvmdiError (JNICALL *GetLocalInt)\r
+      (jframeID frame, jint slot, jint *valuePtr);\r
+    jvmdiError (JNICALL *GetLocalLong)\r
+      (jframeID frame, jint slot, jlong *valuePtr);\r
+    jvmdiError (JNICALL *GetLocalFloat)\r
+      (jframeID frame, jint slot, jfloat *valuePtr);\r
+    jvmdiError (JNICALL *GetLocalDouble)\r
+      (jframeID frame, jint slot, jdouble *valuePtr);\r
+    jvmdiError (JNICALL *SetLocalObject)\r
+      (jframeID frame, jint slot, jobject value);\r
+    jvmdiError (JNICALL *SetLocalInt)\r
+      (jframeID frame, jint slot, jint value);\r
+    jvmdiError (JNICALL *SetLocalLong)\r
+      (jframeID frame, jint slot, jlong value);\r
+    jvmdiError (JNICALL *SetLocalFloat)\r
+      (jframeID frame, jint slot, jfloat value);\r
+    jvmdiError (JNICALL *SetLocalDouble)\r
+      (jframeID frame, jint slot, jdouble value);\r
+\r
+    jvmdiError (JNICALL *CreateRawMonitor)\r
+      (char *name, JVMDI_RawMonitor *monitorPtr);\r
+    jvmdiError (JNICALL *DestroyRawMonitor)\r
+      (JVMDI_RawMonitor monitor);\r
+    jvmdiError (JNICALL *RawMonitorEnter)\r
+      (JVMDI_RawMonitor monitor);\r
+    jvmdiError (JNICALL *RawMonitorExit)\r
+      (JVMDI_RawMonitor monitor);\r
+    jvmdiError (JNICALL *RawMonitorWait)\r
+      (JVMDI_RawMonitor monitor, jlong millis);\r
+    jvmdiError (JNICALL *RawMonitorNotify)\r
+      (JVMDI_RawMonitor monitor);\r
+    jvmdiError (JNICALL *RawMonitorNotifyAll)\r
+      (JVMDI_RawMonitor monitor);\r
+\r
+    jvmdiError (JNICALL *SetBreakpoint)\r
+      (jclass clazz, jmethodID method, jlocation location);\r
+    jvmdiError (JNICALL *ClearBreakpoint)\r
+      (jclass clazz, jmethodID method, jlocation location);\r
+    jvmdiError (JNICALL *ClearAllBreakpoints)\r
+      ();\r
+\r
+    jvmdiError (JNICALL *SetFieldAccessWatch)\r
+      (jclass clazz, jfieldID field);\r
+    jvmdiError (JNICALL *ClearFieldAccessWatch)\r
+      (jclass clazz, jfieldID field);\r
+    jvmdiError (JNICALL *SetFieldModificationWatch)\r
+      (jclass clazz, jfieldID field);\r
+    jvmdiError (JNICALL *ClearFieldModificationWatch)\r
+      (jclass clazz, jfieldID field);\r
+\r
+    jvmdiError (JNICALL *SetAllocationHooks)\r
+      (JVMDI_AllocHook ahook, JVMDI_DeallocHook dhook);\r
+    jvmdiError (JNICALL *Allocate)\r
+      (jlong size, jbyte** memPtr);\r
+    jvmdiError (JNICALL *Deallocate)\r
+      (jbyte* mem);\r
+\r
+    jvmdiError (JNICALL *GetClassSignature)\r
+      (jclass clazz, char **sigPtr);\r
+    jvmdiError (JNICALL *GetClassStatus)\r
+      (jclass clazz, jint *statusPtr);\r
+    jvmdiError (JNICALL *GetSourceFileName)\r
+      (jclass clazz, char **sourceNamePtr);\r
+    jvmdiError (JNICALL *GetClassModifiers)\r
+      (jclass clazz, jint *modifiersPtr);\r
+    jvmdiError (JNICALL *GetClassMethods)\r
+      (jclass clazz, jint *methodCountPtr, jmethodID **methodsPtr);\r
+    jvmdiError (JNICALL *GetClassFields)\r
+       (jclass clazz, jint *fieldCountPtr, jfieldID **fieldsPtr);\r
+    jvmdiError (JNICALL *GetImplementedInterfaces)\r
+      (jclass clazz, jint *interfaceCountPtr, jclass **interfacesPtr);\r
+    jvmdiError (JNICALL *IsInterface)\r
+      (jclass clazz, jboolean *isInterfacePtr);\r
+    jvmdiError (JNICALL *IsArrayClass)\r
+      (jclass clazz, jboolean *isArrayClassPtr);\r
+    jvmdiError (JNICALL *GetClassLoader)\r
+      (jclass clazz, jobject *classloaderPtr);\r
+\r
+    jvmdiError (JNICALL *GetObjectHashCode)\r
+      (jobject object, jint *hashCodePtr);\r
+    jvmdiError (JNICALL *GetMonitorInfo)\r
+      (jobject object, JVMDI_monitor_info *infoPtr);\r
+\r
+    jvmdiError (JNICALL *GetFieldName)\r
+      (jclass clazz, jfieldID field, char **namePtr, char **signaturePtr);\r
+    jvmdiError (JNICALL *GetFieldDeclaringClass)\r
+      (jclass clazz, jfieldID field, jclass *declaringClassPtr);\r
+    jvmdiError (JNICALL *GetFieldModifiers)\r
+      (jclass clazz, jfieldID field, jint *modifiersPtr);\r
+    jvmdiError (JNICALL *IsFieldSynthetic)\r
+      (jclass clazz, jfieldID field, jboolean *isSyntheticPtr);\r
+\r
+    jvmdiError (JNICALL *GetMethodName)\r
+      (jclass clazz, jmethodID method, \r
+       char **namePtr, char **signaturePtr);\r
+    jvmdiError (JNICALL *GetMethodDeclaringClass)\r
+      (jclass clazz, jmethodID method, jclass *declaringClassPtr);\r
+    jvmdiError (JNICALL *GetMethodModifiers)\r
+      (jclass clazz, jmethodID method, jint *modifiersPtr);\r
+    jvmdiError (JNICALL *GetMaxStack)\r
+      (jclass clazz, jmethodID method, jint *maxPtr);\r
+    jvmdiError (JNICALL *GetMaxLocals)\r
+      (jclass clazz, jmethodID method, jint *maxPtr);\r
+    jvmdiError (JNICALL *GetArgumentsSize)\r
+      (jclass clazz, jmethodID method, jint *sizePtr);\r
+    jvmdiError (JNICALL *GetLineNumberTable)\r
+      (jclass clazz, jmethodID method,\r
+       jint *entryCountPtr, JVMDI_line_number_entry **tablePtr);\r
+    jvmdiError (JNICALL *GetMethodLocation)\r
+      (jclass clazz, jmethodID method,\r
+       jlocation *startLocationPtr, jlocation *endLocationPtr);\r
+    jvmdiError (JNICALL *GetLocalVariableTable)\r
+      (jclass clazz, jmethodID method,\r
+       jint *entryCountPtr, JVMDI_local_variable_entry **tablePtr);\r
+    jvmdiError (JNICALL *GetExceptionHandlerTable)\r
+      (jclass clazz, jmethodID method,\r
+       jint *entryCountPtr, JVMDI_exception_handler_entry **tablePtr);\r
+    jvmdiError (JNICALL *GetThrownExceptions)\r
+      (jclass clazz, jmethodID method,\r
+       jint *exceptionCountPtr, jclass **exceptionsPtr);\r
+    jvmdiError (JNICALL *GetBytecodes)\r
+      (jclass clazz, jmethodID method,\r
+       jint *bytecodeCountPtr, jbyte **bytecodesPtr);\r
+    jvmdiError (JNICALL *IsMethodNative)\r
+      (jclass clazz, jmethodID method, jboolean *isNativePtr);\r
+    jvmdiError (JNICALL *IsMethodSynthetic)\r
+      (jclass clazz, jmethodID method, jboolean *isSyntheticPtr);\r
+\r
+    jvmdiError (JNICALL *GetLoadedClasses)\r
+      (jint *classCountPtr, jclass **classesPtr);\r
+    jvmdiError (JNICALL *GetClassLoaderClasses)\r
+      (jobject initiatingLoader, jint *classesCountPtr, \r
+       jclass **classesPtr);\r
+\r
+    jvmdiError (JNICALL *PopFrame)\r
+      (jthread thread);\r
+    jvmdiError (JNICALL *SetFrameLocation)\r
+      (jframeID frame, jlocation location);\r
+    jvmdiError (JNICALL *GetOperandStack)\r
+      (jframeID frame, jint *operandStackSizePtr, \r
+       JVMDI_operand_stack_element **operandStackPtr);\r
+    jvmdiError (JNICALL *SetOperandStack)\r
+      (jframeID frame, jint operandStackSize, \r
+       JVMDI_operand_stack_element *operandStack);\r
+    jvmdiError (JNICALL *AllInstances)\r
+      (jclass clazz, jint *instanceCountPtr, jobject **instancesPtr);\r
+    jvmdiError (JNICALL *References)\r
+      (jobject obj, JVMDI_object_reference_info *refs);\r
+    jvmdiError (JNICALL *GetClassDefinition)\r
+      (jclass clazz, JVMDI_class_definition *classDefPtr);\r
+    jvmdiError (JNICALL *RedefineClasses)\r
+      (jint classCount, JVMDI_class_definition *classDefs);\r
+\r
+    jvmdiError (JNICALL *GetVersionNumber)\r
+      (jint *versionPtr);\r
+    jvmdiError (JNICALL *GetCapabilities)\r
+      (JVMDI_capabilities *capabilitiesPtr);\r
+\r
+    jvmdiError (JNICALL *GetSourceDebugExtension)\r
+      (jclass clazz, char **sourceDebugExtension);\r
+    jvmdiError (JNICALL *IsMethodObsolete)\r
+      (jclass clazz, jmethodID method, jboolean *isObsoletePtr);\r
+\r
+    jvmdiError (JNICALL *SuspendThreadList)\r
+      (jint reqCount, jthread *reqList, jvmdiError *results); \r
+    jvmdiError (JNICALL *ResumeThreadList)\r
+      (jint reqCount, jthread *reqList, jvmdiError *results); \r
+} JVMDI_Interface_1;\r
+  \r
+#ifndef NO_JVMDI_MACROS\r
+\r
+#define JVMDI_ERROR_DUPLICATE_BREAKPOINT JVMDI_ERROR_DUPLICATE\r
+#define JVMDI_ERROR_NO_SUCH_BREAKPOINT   JVMDI_ERROR_NOT_FOUND\r
+#define JVMDI_ERROR_DUPLICATE_FRAME_POP  JVMDI_ERROR_DUPLICATE\r
+\r
+\r
+static JVMDI_Interface_1 *jvmdi_interface = NULL;\r
+static JavaVM *j_vm;\r
+\r
+#ifdef __cplusplus\r
+#define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)?  \\r
+              ((a_env)->GetJavaVM(&j_vm),  \\r
+               (j_vm)->GetEnv((void **)&jvmdi_interface,  \\r
+                               JVMDI_VERSION_1)):0)\r
+#else\r
+#define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)?  \\r
+              ((*a_env)->GetJavaVM(a_env, &j_vm), \\r
+               (*j_vm)->GetEnv(j_vm, (void **)&jvmdi_interface, \\r
+                               JVMDI_VERSION_1)):0)\r
+#endif\r
+\r
+#define JVMDI_SetEventHook(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetEventHook(a1) )\r
+#define JVMDI_GetThreadStatus(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetThreadStatus(a1, a2, a3) )\r
+#define JVMDI_GetAllThreads(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetAllThreads(a1, a2) )\r
+#define JVMDI_SuspendThread(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SuspendThread(a1) )\r
+#define JVMDI_ResumeThread(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->ResumeThread(a1) )\r
+#define JVMDI_StopThread(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->StopThread(a1, a2) )\r
+#define JVMDI_InterruptThread(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->InterruptThread(a1) )\r
+#define JVMDI_SetSingleStep(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetEventNotificationMode( \\r
+                                       (a2) ? JVMDI_ENABLE : JVMDI_DISABLE, \\r
+                                        JVMDI_EVENT_SINGLE_STEP, a1) )\r
+#define JVMDI_GetThreadInfo(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetThreadInfo(a1, a2) )\r
+#define JVMDI_RunDebugThread(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->RunDebugThread(a1, a2, a3, a4) )\r
+#define JVMDI_GetTopThreadGroups(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetTopThreadGroups(a1, a2) )\r
+#define JVMDI_GetThreadGroupInfo(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetThreadGroupInfo(a1, a2) )\r
+#define JVMDI_GetThreadGroupChildren(a_env, a1, a2, a3, a4, a5) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetThreadGroupChildren(a1, a2, a3, a4, a5) )\r
+#define JVMDI_GetCurrentFrame(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetCurrentFrame(a1, a2) )\r
+#define JVMDI_GetCallerFrame(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetCallerFrame(a1, a2) )\r
+#define JVMDI_GetFrameLocation(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetFrameLocation(a1, a2, a3, a4) )\r
+#define JVMDI_NotifyFramePop(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->NotifyFramePop(a1) )\r
+#define JVMDI_GetLocalObject(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetLocalObject(a1, a2, a3) )\r
+#define JVMDI_GetLocalInt(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetLocalInt(a1, a2, a3) )\r
+#define JVMDI_GetLocalLong(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetLocalLong(a1, a2, a3) )\r
+#define JVMDI_GetLocalFloat(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetLocalFloat(a1, a2, a3) )\r
+#define JVMDI_GetLocalDouble(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetLocalDouble(a1, a2, a3) )\r
+#define JVMDI_SetLocalObject(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetLocalObject(a1, a2, a3) )\r
+#define JVMDI_SetLocalInt(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetLocalInt(a1, a2, a3) )\r
+#define JVMDI_SetLocalLong(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetLocalLong(a1, a2, a3) )\r
+#define JVMDI_SetLocalFloat(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetLocalFloat(a1, a2, a3) )\r
+#define JVMDI_SetLocalDouble(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetLocalDouble(a1, a2, a3) )\r
+#define JVMDI_CreateRawMonitor(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->CreateRawMonitor(a1, a2) )\r
+#define JVMDI_DestroyRawMonitor(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->DestroyRawMonitor(a1) )\r
+#define JVMDI_RawMonitorEnter(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->RawMonitorEnter(a1) )\r
+#define JVMDI_RawMonitorExit(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->RawMonitorExit(a1) )\r
+#define JVMDI_RawMonitorWait(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->RawMonitorWait(a1, a2) )\r
+#define JVMDI_RawMonitorNotify(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->RawMonitorNotify(a1) )\r
+#define JVMDI_RawMonitorNotifyAll(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->RawMonitorNotifyAll(a1) )\r
+#define JVMDI_SetBreakpoint(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetBreakpoint(a1, a2, a3) )\r
+#define JVMDI_ClearBreakpoint(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->ClearBreakpoint(a1, a2, a3) )\r
+#define JVMDI_ClearAllBreakpoints(a_env) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->ClearAllBreakpoints() )\r
+#define JVMDI_SetAllocationHooks(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->SetAllocationHooks(a1, a2) )\r
+#define JVMDI_Allocate(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->Allocate(a1, a2) )\r
+#define JVMDI_Deallocate(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->Deallocate(a1) )\r
+#define JVMDI_GetClassSignature(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetClassSignature(a1, a2) )\r
+#define JVMDI_GetClassStatus(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetClassStatus(a1, a2) )\r
+#define JVMDI_GetSourceFileName(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetSourceFileName(a1, a2) )\r
+#define JVMDI_GetClassModifiers(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetClassModifiers(a1, a2) )\r
+#define JVMDI_GetClassMethods(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetClassMethods(a1, a2, a3) )\r
+#define JVMDI_GetClassFields(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetClassFields(a1, a2, a3) )\r
+#define JVMDI_GetImplementedInterfaces(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetImplementedInterfaces(a1, a2, a3) )\r
+#define JVMDI_IsInterface(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->IsInterface(a1, a2) )\r
+#define JVMDI_IsArrayClass(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->IsArrayClass(a1, a2) )\r
+#define JVMDI_ClassLoader(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetClassLoader(a1, a2) )\r
+#define JVMDI_GetFieldName(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetFieldName(a1, a2, a3, a4) )\r
+#define JVMDI_GetFieldDeclaringClass(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetFieldDeclaringClass(a1, a2, a3) )\r
+#define JVMDI_GetFieldModifiers(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetFieldModifiers(a1, a2, a3) )\r
+#define JVMDI_GetMethodName(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetMethodName(a1, a2, a3, a4) )\r
+#define JVMDI_GetMethodDeclaringClass(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetMethodDeclaringClass(a1, a2, a3) )\r
+#define JVMDI_GetMethodModifiers(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetMethodModifiers(a1, a2, a3) )\r
+#define JVMDI_GetMaxStack(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetMaxStack(a1, a2, a3) )\r
+#define JVMDI_GetMaxLocals(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetMaxLocals(a1, a2, a3) )\r
+#define JVMDI_GetArgumentsSize(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetArgumentsSize(a1, a2, a3) )\r
+#define JVMDI_GetLineNumberTable(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetLineNumberTable(a1, a2, a3, a4) )\r
+#define JVMDI_GetMethodLocation(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetMethodLocation(a1, a2, a3, a4) )\r
+#define JVMDI_GetLocalVariableTable(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetLocalVariableTable(a1, a2, a3, a4) )\r
+#define JVMDI_GetExceptionHandlerTable(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetExceptionHandlerTable(a1, a2, a3, a4) )\r
+#define JVMDI_GetThrownExceptions(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetThrownExceptions(a1, a2, a3, a4) )\r
+#define JVMDI_GetBytecodes(a_env, a1, a2, a3, a4) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetBytecodes(a1, a2, a3, a4) )\r
+#define JVMDI_IsMethodNative(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->IsMethodNative(a1, a2, a3) )\r
+#define JVMDI_GetLoadedClasses(a_env, a1, a2) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetLoadedClasses(a1, a2) )\r
+#define JVMDI_GetClassLoaderClasses(a_env, a1, a2, a3) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetClassLoaderClasses(a1, a2, a3) )\r
+#define JVMDI_GetVersionNumber(a_env, a1) ( \\r
+              SetJVMDIfromJNIEnv(a_env), \\r
+              jvmdi_interface->GetVersionNumber(a1) )\r
+\r
+#endif /* !NO_JVMDI_MACROS */\r
+\r
+#ifdef __cplusplus\r
+} /* extern "C" */\r
+#endif /* __cplusplus */\r
+\r
+#endif /* !_JAVASOFT_JVMDI_H_ */\r
+\r
+\r