home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / jreheadf.zip / jvmdi.h < prev    next >
Text File  |  2002-09-19  |  40KB  |  997 lines

  1. /*
  2.  * @(#)src/contract/jvm/sov/jvmdi.h, core, xs131, 20020822 1.10.2.1
  3.  * ===========================================================================
  4.  * Licensed Materials - Property of IBM
  5.  *
  6.  * IBM Java(tm)2 SDK, Standard Edition, v 1.3.1
  7.  * (C) Copyright IBM Corp. 1998, 2001. All Rights Reserved
  8.  * US Government Users Restricted Rights - Use, duplication or disclosure
  9.  * restricted by GSA ADP Schedule Contract with IBM Corp.
  10.  * ===========================================================================
  11.  */
  12.  
  13. /*
  14.  *
  15.  * ===========================================================================
  16.  *
  17.  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
  18.  * ===========================================================================
  19.  * Change activity:
  20.  *
  21.  * Reason  Date   Origin  Description
  22.  * ------  ----   ------  ----------------------------------------------------
  23.  * 006609  030900 hdjbm   Inserted void for function prototypes to please icc
  24.  * 009653  080800 hdngmr  Added XJNICALL to hook definitions.
  25.  * 025989  271000 hdgdb   Added helper macro for SetEventNotificationMode
  26.  *
  27.  * ===========================================================================
  28.  */
  29.  
  30. /*
  31.  *   Java Virtual Machine Debug Interface
  32.  *
  33.  *   Defines debugging functionality that a VM should provide.
  34.  *
  35.  *   Should not overlap functionality in jni.h
  36.  */
  37.  
  38. #ifndef _JAVASOFT_JVMDI_H_
  39. #define _JAVASOFT_JVMDI_H_
  40.  
  41. #include "jni.h"
  42.  
  43. #define JVMDI_VERSION_1 0x20010000
  44.  
  45. #ifdef __cplusplus
  46. extern "C" {
  47. #endif
  48.  
  49. typedef jobject jthread;
  50.  
  51. typedef jobject jthreadGroup;
  52.  
  53. struct _jframeID;
  54. typedef struct _jframeID *jframeID;
  55.  
  56.   /* specifies program location "pc" - often byte code index */
  57. typedef jlong jlocation;
  58.  
  59.   /*
  60.    *  Errors
  61.    */
  62.  
  63. typedef jint jvmdiError;
  64.  
  65.   /* no error */
  66. #define JVMDI_ERROR_NONE                 ((jvmdiError)0)
  67.  
  68.   /*
  69.    * Errors on thread operations
  70.    */
  71.  
  72.   /* invalid thread */
  73. #define JVMDI_ERROR_INVALID_THREAD       ((jvmdiError)10)
  74.   /* invalid thread group */
  75. #define JVMDI_ERROR_INVALID_THREAD_GROUP ((jvmdiError)11)
  76.   /* invalid thread priority */
  77. #define JVMDI_ERROR_INVALID_PRIORITY     ((jvmdiError)12)
  78.   /* thread not suspended */
  79. #define JVMDI_ERROR_THREAD_NOT_SUSPENDED ((jvmdiError)13)
  80.   /* thread already suspended */
  81. #define JVMDI_ERROR_THREAD_SUSPENDED     ((jvmdiError)14)
  82.  
  83.   /*
  84.    * Errors on object and class operations
  85.    */
  86.  
  87.   /* invalid object (implementation not required to gracefully catch) */
  88. #define JVMDI_ERROR_INVALID_OBJECT       ((jvmdiError)20)
  89.   /* invalid class (implementation not required to gracefully catch) */
  90. #define JVMDI_ERROR_INVALID_CLASS        ((jvmdiError)21)
  91.   /* class not prepared */
  92. #define JVMDI_ERROR_CLASS_NOT_PREPARED   ((jvmdiError)22)
  93.   /* invalid methodID (implementation not required to gracefully catch) */
  94. #define JVMDI_ERROR_INVALID_METHODID     ((jvmdiError)23)
  95.   /* invalid location */
  96. #define JVMDI_ERROR_INVALID_LOCATION     ((jvmdiError)24)
  97.   /* invalid fieldID (implementation not required to gracefully catch) */
  98. #define JVMDI_ERROR_INVALID_FIELDID      ((jvmdiError)25)
  99.  
  100.   /*
  101.    * Errors on frame operations
  102.    */
  103.  
  104.   /* invalid frameID (implementation not required to gracefully catch) */
  105. #define JVMDI_ERROR_INVALID_FRAMEID      ((jvmdiError)30)
  106.   /* there are no more frames on the stack */
  107. #define JVMDI_ERROR_NO_MORE_FRAMES       ((jvmdiError)31)
  108.   /* operation cannot be performed on this frame */
  109. #define JVMDI_ERROR_OPAQUE_FRAME         ((jvmdiError)32)
  110.   /* operation can only be performed on current frame */
  111. #define JVMDI_ERROR_NOT_CURRENT_FRAME    ((jvmdiError)33)
  112.   /* type mismatch (implementation not required to gracefully catch) */
  113. #define JVMDI_ERROR_TYPE_MISMATCH        ((jvmdiError)34)
  114.   /* invalid slot */
  115. #define JVMDI_ERROR_INVALID_SLOT         ((jvmdiError)35)
  116.  
  117.   /*
  118.    * Errors on set/clear/find operations
  119.    */
  120.  
  121.   /* item already present */
  122. #define JVMDI_ERROR_DUPLICATE            ((jvmdiError)40)
  123.   /* item not found */
  124. #define JVMDI_ERROR_NOT_FOUND            ((jvmdiError)41)
  125.  
  126.   /*
  127.    * Errors on monitor operations
  128.    */
  129.  
  130.   /* invalid monitor */
  131. #define JVMDI_ERROR_INVALID_MONITOR      ((jvmdiError)50)
  132.   /* wait, notify, notify all tried without entering monitor  */
  133. #define JVMDI_ERROR_NOT_MONITOR_OWNER    ((jvmdiError)51)
  134.   /* waiting thread interrupted */
  135. #define JVMDI_ERROR_INTERRUPT            ((jvmdiError)52)
  136.  
  137.   /*
  138.    * Class redefinition / operand stack errors
  139.    */
  140.  
  141.   /* The equivalent of ClassFormatError */
  142. #define JVMDI_ERROR_INVALID_CLASS_FORMAT          ((jvmdiError)60)
  143.   /* The equivalent of ClassCircularityError */
  144. #define JVMDI_ERROR_CIRCULAR_CLASS_DEFINITION     ((jvmdiError)61)
  145.   /* The class bytes fail verification */
  146. #define JVMDI_ERROR_FAILS_VERIFICATION            ((jvmdiError)62)
  147.   /* Cannot add new methods to an existing class */
  148. #define JVMDI_ERROR_ADD_METHOD_NOT_IMPLEMENTED    ((jvmdiError)63)
  149.   /* Cannot change fields of an existing class */
  150. #define JVMDI_ERROR_SCHEMA_CHANGE_NOT_IMPLEMENTED ((jvmdiError)64)
  151.   /* bci/operand stack/local var combination is not verifiably type safe */
  152. #define JVMDI_ERROR_INVALID_TYPESTATE             ((jvmdiError)65)
  153.  
  154.   /*
  155.    * Miscellaneous errors
  156.    */
  157.  
  158.   /* Not yet implemented */
  159. #define JVMDI_ERROR_NOT_IMPLEMENTED      ((jvmdiError)99)
  160.   /* null pointer */
  161. #define JVMDI_ERROR_NULL_POINTER         ((jvmdiError)100)
  162.   /* information is absent */
  163. #define JVMDI_ERROR_ABSENT_INFORMATION   ((jvmdiError)101)
  164.   /* invalid event type  */
  165. #define JVMDI_ERROR_INVALID_EVENT_TYPE   ((jvmdiError)102)
  166.   /* invalid argument  */
  167. #define JVMDI_ERROR_ILLEGAL_ARGUMENT     ((jvmdiError)103)
  168.  
  169.   /*
  170.    * Universal errors. These errors may be returned by
  171.    * any JVMDI function, not just the ones for which they are listed
  172.    * below.
  173.    */
  174.  
  175.   /* no more memory available for allocation */
  176. #define JVMDI_ERROR_OUT_OF_MEMORY        ((jvmdiError)110)
  177.   /* debugging has not been enabled in this VM */
  178. #define JVMDI_ERROR_ACCESS_DENIED        ((jvmdiError)111)
  179.   /* VM is dead (implementation not required to gracefully catch) */
  180. #define JVMDI_ERROR_VM_DEAD              ((jvmdiError)112)
  181.   /* internal error  */
  182. #define JVMDI_ERROR_INTERNAL             ((jvmdiError)113)
  183.   /* Thread calling JVMDI function not attached to VM */
  184. #define JVMDI_ERROR_UNATTACHED_THREAD    ((jvmdiError)115)
  185.  
  186.  
  187.   /*
  188.    *  Threads
  189.    */
  190.  
  191.   /* Thread status is unknown */
  192. #define JVMDI_THREAD_STATUS_UNKNOWN      ((jint)-1)
  193.   /* Thread is waiting to die */
  194. #define JVMDI_THREAD_STATUS_ZOMBIE       ((jint)0)
  195.   /* Thread is runnable */
  196. #define JVMDI_THREAD_STATUS_RUNNING      ((jint)1)
  197.   /* Thread is sleeping - Thread.sleep() or JVM_Sleep() was called */
  198. #define JVMDI_THREAD_STATUS_SLEEPING     ((jint)2)
  199.   /* Thread is waiting on a java monitor */
  200. #define JVMDI_THREAD_STATUS_MONITOR      ((jint)3)
  201.   /* Thread is waiting - Thread.wait() or JVM_MonitorWait() was called */
  202. #define JVMDI_THREAD_STATUS_WAIT         ((jint)4)
  203.  
  204.   /* Thread is suspended - Thread.suspend(), JVM_Suspend() or
  205.    * JVMDI_Suspend was called */
  206. #define JVMDI_SUSPEND_STATUS_SUSPENDED   ((jint)0x1)
  207.   /* Thread is at a breakpoint */
  208. #define JVMDI_SUSPEND_STATUS_BREAK       ((jint)0x2)
  209.  
  210.  
  211.   /* Thread priority constants */
  212. #define JVMDI_THREAD_MIN_PRIORITY   ((jint)1)
  213. #define JVMDI_THREAD_NORM_PRIORITY  ((jint)5)
  214. #define JVMDI_THREAD_MAX_PRIORITY   ((jint)10)
  215.  
  216. typedef struct {
  217.     char *name;
  218.     jint  priority;
  219.     jboolean is_daemon;
  220.     jthreadGroup thread_group;
  221.     jobject context_class_loader;
  222. } JVMDI_thread_info;
  223.  
  224. typedef struct {
  225.     jthreadGroup parent;
  226.     char *name;
  227.     jint  max_priority;
  228.     jboolean is_daemon;
  229. } JVMDI_thread_group_info;
  230.  
  231. #define JVMDI_DISABLE ((jint) 0)
  232. #define JVMDI_ENABLE  ((jint) 1)
  233.  
  234. /*
  235.  * Initial function for debug threads created through JVMDI
  236.  */
  237. typedef void (XJNICALL *JVMDI_StartFunction)(void *);              /*ibm@9653*/
  238.  
  239. /*
  240.  * Type for debug monitors created through JVMDI
  241.  */
  242. typedef void *JVMDI_RawMonitor;
  243.  
  244. #define JVMDI_MONITOR_WAIT_FOREVER ((jlong)(-1))
  245.  
  246. /*
  247.  * Monitor information
  248.  */
  249. typedef struct {
  250.     jthread owner;
  251.     jint entry_count;
  252.     jint waiter_count;
  253.     jthread *waiters;
  254. } JVMDI_monitor_info;
  255.  
  256. typedef struct {
  257.     jint owned_monitor_count;
  258.     jobject *owned_monitors;
  259. } JVMDI_owned_monitor_info;
  260.  
  261.   /*
  262.    *  Events
  263.    */
  264.  
  265.     /* kind = JVMDI_EVENT_SINGLE_STEP */
  266.     typedef struct {
  267.         jthread thread;
  268.         jclass clazz;
  269.         jmethodID method;
  270.         jlocation location;
  271.     } JVMDI_single_step_event_data;
  272.  
  273.     /* kind = JVMDI_EVENT_BREAKPOINT */
  274.     typedef struct {
  275.         jthread thread;
  276.         jclass clazz;
  277.         jmethodID method;
  278.         jlocation location;
  279.     } JVMDI_breakpoint_event_data;
  280.  
  281.     /* kind = JVMDI_EVENT_FIELD_ACCESS */
  282.     typedef struct {
  283.         jthread thread;
  284.         jclass clazz;
  285.         jmethodID method;
  286.         jlocation location;
  287.         jclass field_clazz;
  288.         jobject object;
  289.         jfieldID field;
  290.     } JVMDI_field_access_event_data;
  291.  
  292.     /* kind = JVMDI_EVENT_FIELD_MODIFICATION */
  293.     typedef struct {
  294.         jthread thread;
  295.         jclass clazz;
  296.         jmethodID method;
  297.         jlocation location;
  298.         jclass field_clazz;
  299.         jobject object;
  300.         jfieldID field;
  301.         char signature_type;
  302.         jvalue new_value;
  303.     } JVMDI_field_modification_event_data;
  304.  
  305.     /* kind = JVMDI_EVENT_FRAME_POP */
  306.     /* kind = JVMDI_EVENT_METHOD_ENTRY */
  307.     /* kind = JVMDI_EVENT_METHOD_EXIT */
  308.     typedef struct {
  309.         jthread thread;
  310.         jclass clazz;
  311.         jmethodID method;
  312.         jframeID frame;
  313.     } JVMDI_frame_event_data;
  314.  
  315.     /* kind = JVMDI_EVENT_EXCEPTION */
  316.     typedef struct {
  317.         jthread thread;
  318.         jclass clazz;
  319.         jmethodID method;
  320.         jlocation location;
  321.         jobject exception;
  322.         jclass catch_clazz;
  323.         jmethodID catch_method;
  324.         jlocation catch_location;
  325.     } JVMDI_exception_event_data;
  326.  
  327.     /* kind = JVMDI_EVENT_EXCEPTION_CATCH */
  328.     typedef struct {
  329.         jthread thread;
  330.         jclass clazz;
  331.         jmethodID method;
  332.         jlocation location;
  333.         jobject exception;
  334.     } JVMDI_exception_catch_event_data;
  335.  
  336.     /* kind = JVMDI_EVENT_USER_DEFINED */
  337.     typedef struct {
  338.         jobject object;
  339.         jint key;
  340.     } JVMDI_user_event_data;
  341.  
  342.     /* kind = JVMDI_EVENT_THREAD_END or */
  343.     /* JVMDI_EVENT_THREAD_START */
  344.     typedef struct {
  345.         jthread thread;
  346.     } JVMDI_thread_change_event_data;
  347.  
  348.     /* kind = JVMDI_EVENT_CLASS_LOAD, */
  349.     /* JVMDI_EVENT_CLASS_UNLOAD, or */
  350.     /* JVMDI_EVENT_CLASS_PREPARE */
  351.     typedef struct {
  352.         jthread thread;
  353.         jclass clazz;
  354.     } JVMDI_class_event_data;
  355.  
  356. /* This stucture passes information about the event.
  357.  * location is the index of the last instruction executed.
  358.  */
  359. typedef struct {
  360.     jint kind;          /* the discriminant */
  361.  
  362.     union {
  363.         /* kind = JVMDI_EVENT_SINGLE_STEP */
  364.         JVMDI_single_step_event_data single_step;
  365.  
  366.         /* kind = JVMDI_EVENT_BREAKPOINT */
  367.         JVMDI_breakpoint_event_data breakpoint;
  368.  
  369.         /* kind = JVMDI_EVENT_FRAME_POP */
  370.         /* kind = JVMDI_EVENT_METHOD_ENTRY */
  371.         /* kind = JVMDI_EVENT_METHOD_EXIT */
  372.         JVMDI_frame_event_data frame;
  373.  
  374.         /* kind = JVMDI_EVENT_FIELD_ACCESS */
  375.         JVMDI_field_access_event_data field_access;
  376.  
  377.         /* kind = JVMDI_EVENT_FIELD_MODIFICATION */
  378.         JVMDI_field_modification_event_data field_modification;
  379.  
  380.         /* kind = JVMDI_EVENT_EXCEPTION */
  381.         JVMDI_exception_event_data exception;
  382.  
  383.         /* kind = JVMDI_EVENT_EXCEPTION_CATCH */
  384.         JVMDI_exception_catch_event_data exception_catch;
  385.  
  386.         /* kind = JVMDI_EVENT_USER_DEFINED */
  387.         JVMDI_user_event_data user;
  388.  
  389.         /* kind = JVMDI_EVENT_THREAD_END or */
  390.         /* JVMDI_EVENT_THREAD_START */
  391.         JVMDI_thread_change_event_data thread_change;
  392.  
  393.         /* kind = JVMDI_EVENT_CLASS_LOAD, */
  394.         /* JVMDI_EVENT_CLASS_UNLOAD, or */
  395.         /* JVMDI_EVENT_CLASS_PREPARE */
  396.         JVMDI_class_event_data class_event;
  397.  
  398.         /* kind = JVMDI_EVENT_VM_DEATH, JVMDI_EVENT_VM_INIT */
  399.         /* no additional fields */
  400.     } u;
  401. } JVMDI_Event;
  402.  
  403.         /*** event kinds ***/
  404. #define JVMDI_EVENT_SINGLE_STEP   ((jint)1)
  405. #define JVMDI_EVENT_BREAKPOINT    ((jint)2)
  406. #define JVMDI_EVENT_FRAME_POP     ((jint)3)
  407. #define JVMDI_EVENT_EXCEPTION     ((jint)4)
  408. #define JVMDI_EVENT_USER_DEFINED  ((jint)5)
  409. #define JVMDI_EVENT_THREAD_START  ((jint)6)
  410. #define JVMDI_EVENT_THREAD_END    ((jint)7)
  411. #define JVMDI_EVENT_CLASS_PREPARE ((jint)8)
  412. #define JVMDI_EVENT_CLASS_UNLOAD  ((jint)9)
  413. #define JVMDI_EVENT_CLASS_LOAD    ((jint)10)
  414. #define JVMDI_EVENT_FIELD_ACCESS       ((jint)20)
  415. #define JVMDI_EVENT_FIELD_MODIFICATION ((jint)21)
  416. #define JVMDI_EVENT_EXCEPTION_CATCH    ((jint)30)
  417. #define JVMDI_EVENT_METHOD_ENTRY       ((jint)40)
  418. #define JVMDI_EVENT_METHOD_EXIT        ((jint)41)
  419. #define JVMDI_EVENT_VM_INIT            ((jint)90)
  420. #define JVMDI_EVENT_VM_DEATH           ((jint)99)
  421.  
  422. #define JVMDI_MAX_EVENT_TYPE_VAL       ((jint)99)
  423.  
  424.  
  425.  
  426. /* event handler hook */
  427. typedef void (XJNICALL *JVMDI_EventHook)(JNIEnv *env,
  428.                                          JVMDI_Event *event);      /*ibm@9653*/
  429.  
  430. typedef jvmdiError (XJNICALL *JVMDI_AllocHook) (jlong size,
  431.                                                 jbyte** memPtr);   /*ibm@9653*/
  432. typedef jvmdiError (XJNICALL *JVMDI_DeallocHook) (jbyte* buffer);  /*ibm@9653*/
  433.  
  434. /*
  435.  * Class states used in JVMDI_GetClassStatus
  436.  */
  437. #define JVMDI_CLASS_STATUS_VERIFIED          ((jint)0x01)
  438. #define JVMDI_CLASS_STATUS_PREPARED          ((jint)0x02)
  439. #define JVMDI_CLASS_STATUS_INITIALIZED       ((jint)0x04)
  440.  /* Error prevents initialization */
  441. #define JVMDI_CLASS_STATUS_ERROR             ((jint)0x08)
  442.  
  443. /* structure for returning line number information
  444.  */
  445. typedef struct {
  446.     jlocation start_location;
  447.     jint line_number;
  448. } JVMDI_line_number_entry;
  449.  
  450.  
  451. /* structure for returning local variable information
  452.  */
  453. typedef struct {
  454.     jlocation start_location;   /* variable valid start_location */
  455.     jint length;                /* upto start_location+length */
  456.     char *name;                 /* name in UTF8 */
  457.     char *signature;            /* type signature in UTF8 */
  458.     jint slot;                  /* variable slot, see JVMDI_GetLocal*()  */
  459. } JVMDI_local_variable_entry;
  460.  
  461. /* structure for returning exception handler information
  462.  */
  463. typedef struct {
  464.     jlocation start_location;
  465.     jlocation end_location;
  466.     jlocation handler_location;
  467.     jclass exception;           /* if null, all exceptions */
  468. } JVMDI_exception_handler_entry;
  469.  
  470. #define JVMDI_OPERAND_TYPE_REFERENCE      ((jint)1)
  471. #define JVMDI_OPERAND_TYPE_INT            ((jint)2)
  472. #define JVMDI_OPERAND_TYPE_FLOAT          ((jint)3)
  473. #define JVMDI_OPERAND_TYPE_LONG0          ((jint)4) /* least sig. 32 bits */
  474. #define JVMDI_OPERAND_TYPE_LONG1          ((jint)5) /* most sig. 32 bits */
  475. #define JVMDI_OPERAND_TYPE_DOUBLE0        ((jint)6) /* least sig. 32 bits */
  476. #define JVMDI_OPERAND_TYPE_DOUBLE1        ((jint)7) /* most sig. 32 bits */
  477. #define JVMDI_OPERAND_TYPE_RETURN_ADDRESS ((jint)8)
  478.  
  479. typedef struct {
  480.     jint word;                 /* 32 bit operand stack quantities */
  481.     jint type;                 /* type encoding of the operand word */
  482.                                /* one of JVMDI_OPERAND_TYPE_* */
  483. } JVMDI_operand_stack_element;
  484.  
  485. typedef struct {
  486.     jint instance_field_count; /* number of instance fields referencing obj */
  487.     struct JVMDI_instance_field {
  488.         jobject instance;      /* instance referencing obj */
  489.         jfieldID field;        /* field holding reference */
  490.     } *instance_fields;        /* instanceField_count of them */
  491.  
  492.     jint static_field_count;   /* number of static fields referencing obj */
  493.     struct JVMDI_static_field {
  494.         jclass clazz;          /* class referencing obj */
  495.         jfieldID static_field; /* field holding reference */
  496.     } *static_fields;          /* static_field_count of them */
  497.  
  498.     jint array_element_count;  /* number of array elements referencing obj */
  499.     struct JVMDI_array_element {
  500.         jobjectArray array;    /* array referencing obj */
  501.         jint index;            /* index holding reference */
  502.     } *array_elements;         /* array_element_count of them */
  503.  
  504.     jint frame_slot_count;     /* number of frame slots referencing obj */
  505.     struct JVMDI_frame_slot {
  506.         jthread thread;        /* thread of the frame */
  507.         jframeID frame;        /* frame referencing obj */
  508.         jint slot;             /* slot holding reference */
  509.     } *frame_slots;            /* frame_slot_count of them */
  510. } JVMDI_object_reference_info;
  511.  
  512. /* structure for defining a class
  513. */
  514. typedef struct {
  515.     jclass clazz;              /* Class object for this class */
  516.     jint class_byte_count;     /* number of bytes defining class (below) */
  517.     jbyte *class_bytes;        /* bytes defining class (in JVM spec */
  518.                                /* Class File Format) */
  519. } JVMDI_class_definition;
  520.  
  521.  
  522. typedef struct {
  523.     unsigned int can_watch_field_modification      : 1;
  524.     unsigned int can_watch_field_access            : 1;
  525.     unsigned int can_get_bytecodes                 : 1;
  526.     unsigned int can_get_synthetic_attribute       : 1;
  527.     unsigned int can_get_owned_monitor_info        : 1;
  528.     unsigned int can_get_current_contended_monitor : 1;
  529.     unsigned int can_get_monitor_info              : 1;
  530.     unsigned int can_get_heap_info                 : 1;
  531.     unsigned int can_get_operand_stack             : 1;
  532.     unsigned int can_set_operand_stack             : 1;
  533.     unsigned int can_pop_frame                     : 1;
  534.     unsigned int can_get_class_definition          : 1;
  535.     unsigned int can_redefine_classes              : 1;
  536.     unsigned int can_add_method                    : 1;
  537.     unsigned int can_change_schema                 : 1;
  538. } JVMDI_capabilities;
  539.  
  540. typedef struct JVMDI_Interface_1_ {
  541.     jvmdiError (JNICALL *SetEventHook)
  542.       (JVMDI_EventHook hook);
  543.     jvmdiError (JNICALL *SetEventNotificationMode)
  544.       (jint mode, jint eventType, jthread thread, ...);
  545.  
  546.     jvmdiError (JNICALL *GetThreadStatus)
  547.       (jthread thread,
  548.        jint *threadStatusPtr, jint *suspendStatusPtr);
  549.     jvmdiError (JNICALL *GetAllThreads)
  550.       (jint *threadsCountPtr, jthread **threadsPtr);
  551.     jvmdiError (JNICALL *SuspendThread)
  552.       (jthread thread);
  553.     jvmdiError (JNICALL *ResumeThread)
  554.       (jthread thread);
  555.     jvmdiError (JNICALL *StopThread)
  556.       (jthread thread, jobject exception);
  557.     jvmdiError (JNICALL *InterruptThread)
  558.       (jthread thread);
  559.     jvmdiError (JNICALL *GetThreadInfo)
  560.       (jthread thread, JVMDI_thread_info *infoPtr);
  561.     jvmdiError (JNICALL *GetOwnedMonitorInfo)
  562.       (jthread thread, JVMDI_owned_monitor_info *infoPtr);
  563.     jvmdiError (JNICALL *GetCurrentContendedMonitor)
  564.       (jthread thread, jobject *monitor);
  565.     jvmdiError (JNICALL *RunDebugThread)
  566.       (jthread thread, JVMDI_StartFunction proc, void *arg,
  567.        int priority);
  568.  
  569.     jvmdiError (JNICALL *GetTopThreadGroups)
  570.       (jint *groupCountPtr, jthreadGroup **groupsPtr);
  571.     jvmdiError (JNICALL *GetThreadGroupInfo)
  572.       (jthreadGroup group, JVMDI_thread_group_info *infoPtr);
  573.     jvmdiError (JNICALL *GetThreadGroupChildren)
  574.       (jthreadGroup group,
  575.        jint *threadCountPtr, jthread **threadsPtr,
  576.        jint *groupCountPtr, jthreadGroup **groupsPtr);
  577.  
  578.     jvmdiError (JNICALL *GetFrameCount)
  579.       (jthread thread, jint *countPtr);
  580.     jvmdiError (JNICALL *GetCurrentFrame)
  581.       (jthread thread, jframeID *framePtr);
  582.     jvmdiError (JNICALL *GetCallerFrame)
  583.       (jframeID called, jframeID *framePtr);
  584.     jvmdiError (JNICALL *GetFrameLocation)
  585.       (jframeID frame, jclass *classPtr, jmethodID *methodPtr,
  586.        jlocation *locationPtr);
  587.     jvmdiError (JNICALL *NotifyFramePop)
  588.       (jframeID frame);
  589.     jvmdiError (JNICALL *GetLocalObject)
  590.       (jframeID frame, jint slot, jobject *valuePtr);
  591.     jvmdiError (JNICALL *GetLocalInt)
  592.       (jframeID frame, jint slot, jint *valuePtr);
  593.     jvmdiError (JNICALL *GetLocalLong)
  594.       (jframeID frame, jint slot, jlong *valuePtr);
  595.     jvmdiError (JNICALL *GetLocalFloat)
  596.       (jframeID frame, jint slot, jfloat *valuePtr);
  597.     jvmdiError (JNICALL *GetLocalDouble)
  598.       (jframeID frame, jint slot, jdouble *valuePtr);
  599.     jvmdiError (JNICALL *SetLocalObject)
  600.       (jframeID frame, jint slot, jobject value);
  601.     jvmdiError (JNICALL *SetLocalInt)
  602.       (jframeID frame, jint slot, jint value);
  603.     jvmdiError (JNICALL *SetLocalLong)
  604.       (jframeID frame, jint slot, jlong value);
  605.     jvmdiError (JNICALL *SetLocalFloat)
  606.       (jframeID frame, jint slot, jfloat value);
  607.     jvmdiError (JNICALL *SetLocalDouble)
  608.       (jframeID frame, jint slot, jdouble value);
  609.  
  610.     jvmdiError (JNICALL *CreateRawMonitor)
  611.       (char *name, JVMDI_RawMonitor *monitorPtr);
  612.     jvmdiError (JNICALL *DestroyRawMonitor)
  613.       (JVMDI_RawMonitor monitor);
  614.     jvmdiError (JNICALL *RawMonitorEnter)
  615.       (JVMDI_RawMonitor monitor);
  616.     jvmdiError (JNICALL *RawMonitorExit)
  617.       (JVMDI_RawMonitor monitor);
  618.     jvmdiError (JNICALL *RawMonitorWait)
  619.       (JVMDI_RawMonitor monitor, jlong millis);
  620.     jvmdiError (JNICALL *RawMonitorNotify)
  621.       (JVMDI_RawMonitor monitor);
  622.     jvmdiError (JNICALL *RawMonitorNotifyAll)
  623.       (JVMDI_RawMonitor monitor);
  624.  
  625.     jvmdiError (JNICALL *SetBreakpoint)
  626.       (jclass clazz, jmethodID method, jlocation location);
  627.     jvmdiError (JNICALL *ClearBreakpoint)
  628.       (jclass clazz, jmethodID method, jlocation location);
  629.     jvmdiError (JNICALL *ClearAllBreakpoints)
  630.       (void);    /*ibm@6609*/
  631.  
  632.     jvmdiError (JNICALL *SetFieldAccessWatch)
  633.       (jclass clazz, jfieldID field);
  634.     jvmdiError (JNICALL *ClearFieldAccessWatch)
  635.       (jclass clazz, jfieldID field);
  636.     jvmdiError (JNICALL *SetFieldModificationWatch)
  637.       (jclass clazz, jfieldID field);
  638.     jvmdiError (JNICALL *ClearFieldModificationWatch)
  639.       (jclass clazz, jfieldID field);
  640.  
  641.     jvmdiError (JNICALL *SetAllocationHooks)
  642.       (JVMDI_AllocHook ahook, JVMDI_DeallocHook dhook);
  643.     jvmdiError (JNICALL *Allocate)
  644.       (jlong size, jbyte** memPtr);
  645.     jvmdiError (JNICALL *Deallocate)
  646.       (jbyte* mem);
  647.  
  648.     jvmdiError (JNICALL *GetClassSignature)
  649.       (jclass clazz, char **sigPtr);
  650.     jvmdiError (JNICALL *GetClassStatus)
  651.       (jclass clazz, jint *statusPtr);
  652.     jvmdiError (JNICALL *GetSourceFileName)
  653.       (jclass clazz, char **sourceNamePtr);
  654.     jvmdiError (JNICALL *GetClassModifiers)
  655.       (jclass clazz, jint *modifiersPtr);
  656.     jvmdiError (JNICALL *GetClassMethods)
  657.       (jclass clazz, jint *methodCountPtr, jmethodID **methodsPtr);
  658.     jvmdiError (JNICALL *GetClassFields)
  659.        (jclass clazz, jint *fieldCountPtr, jfieldID **fieldsPtr);
  660.     jvmdiError (JNICALL *GetImplementedInterfaces)
  661.       (jclass clazz, jint *interfaceCountPtr, jclass **interfacesPtr);
  662.     jvmdiError (JNICALL *IsInterface)
  663.       (jclass clazz, jboolean *isInterfacePtr);
  664.     jvmdiError (JNICALL *IsArrayClass)
  665.       (jclass clazz, jboolean *isArrayClassPtr);
  666.     jvmdiError (JNICALL *GetClassLoader)
  667.       (jclass clazz, jobject *classloaderPtr);
  668.  
  669.     jvmdiError (JNICALL *GetObjectHashCode)
  670.       (jobject object, jint *hashCodePtr);
  671.     jvmdiError (JNICALL *GetMonitorInfo)
  672.       (jobject object, JVMDI_monitor_info *infoPtr);
  673.  
  674.     jvmdiError (JNICALL *GetFieldName)
  675.       (jclass clazz, jfieldID field, char **namePtr, char **signaturePtr);
  676.     jvmdiError (JNICALL *GetFieldDeclaringClass)
  677.       (jclass clazz, jfieldID field, jclass *declaringClassPtr);
  678.     jvmdiError (JNICALL *GetFieldModifiers)
  679.       (jclass clazz, jfieldID field, jint *modifiersPtr);
  680.     jvmdiError (JNICALL *IsFieldSynthetic)
  681.       (jclass clazz, jfieldID field, jboolean *isSyntheticPtr);
  682.  
  683.     jvmdiError (JNICALL *GetMethodName)
  684.       (jclass clazz, jmethodID method,
  685.        char **namePtr, char **signaturePtr);
  686.     jvmdiError (JNICALL *GetMethodDeclaringClass)
  687.       (jclass clazz, jmethodID method, jclass *declaringClassPtr);
  688.     jvmdiError (JNICALL *GetMethodModifiers)
  689.       (jclass clazz, jmethodID method, jint *modifiersPtr);
  690.     jvmdiError (JNICALL *GetMaxStack)
  691.       (jclass clazz, jmethodID method, jint *maxPtr);
  692.     jvmdiError (JNICALL *GetMaxLocals)
  693.       (jclass clazz, jmethodID method, jint *maxPtr);
  694.     jvmdiError (JNICALL *GetArgumentsSize)
  695.       (jclass clazz, jmethodID method, jint *sizePtr);
  696.     jvmdiError (JNICALL *GetLineNumberTable)
  697.       (jclass clazz, jmethodID method,
  698.        jint *entryCountPtr, JVMDI_line_number_entry **tablePtr);
  699.     jvmdiError (JNICALL *GetMethodLocation)
  700.       (jclass clazz, jmethodID method,
  701.        jlocation *startLocationPtr, jlocation *endLocationPtr);
  702.     jvmdiError (JNICALL *GetLocalVariableTable)
  703.       (jclass clazz, jmethodID method,
  704.        jint *entryCountPtr, JVMDI_local_variable_entry **tablePtr);
  705.     jvmdiError (JNICALL *GetExceptionHandlerTable)
  706.       (jclass clazz, jmethodID method,
  707.        jint *entryCountPtr, JVMDI_exception_handler_entry **tablePtr);
  708.     jvmdiError (JNICALL *GetThrownExceptions)
  709.       (jclass clazz, jmethodID method,
  710.        jint *exceptionCountPtr, jclass **exceptionsPtr);
  711.     jvmdiError (JNICALL *GetBytecodes)
  712.       (jclass clazz, jmethodID method,
  713.        jint *bytecodeCountPtr, jbyte **bytecodesPtr);
  714.     jvmdiError (JNICALL *IsMethodNative)
  715.       (jclass clazz, jmethodID method, jboolean *isNativePtr);
  716.     jvmdiError (JNICALL *IsMethodSynthetic)
  717.       (jclass clazz, jmethodID method, jboolean *isSyntheticPtr);
  718.  
  719.     jvmdiError (JNICALL *GetLoadedClasses)
  720.       (jint *classCountPtr, jclass **classesPtr);
  721.     jvmdiError (JNICALL *GetClassLoaderClasses)
  722.       (jobject initiatingLoader, jint *classesCountPtr,
  723.        jclass **classesPtr);
  724.  
  725.     jvmdiError (JNICALL *PopFrame)
  726.       (jthread thread);
  727.     jvmdiError (JNICALL *SetFrameLocation)
  728.       (jframeID frame, jlocation location);
  729.     jvmdiError (JNICALL *GetOperandStack)
  730.       (jframeID frame, jint *operandStackSizePtr,
  731.        JVMDI_operand_stack_element **operandStackPtr);
  732.     jvmdiError (JNICALL *SetOperandStack)
  733.       (jframeID frame, jint operandStackSize,
  734.        JVMDI_operand_stack_element *operandStack);
  735.     jvmdiError (JNICALL *AllInstances)
  736.       (jclass clazz, jint *instanceCountPtr, jobject **instancesPtr);
  737.     jvmdiError (JNICALL *References)
  738.       (jobject obj, JVMDI_object_reference_info *refs);
  739.     jvmdiError (JNICALL *GetClassDefinition)
  740.       (jclass clazz, JVMDI_class_definition *classDefPtr);
  741.     jvmdiError (JNICALL *RedefineClasses)
  742.       (jint classCount, JVMDI_class_definition *classDefs);
  743.  
  744.     jvmdiError (JNICALL *GetVersionNumber)
  745.       (jint *versionPtr);
  746.     jvmdiError (JNICALL *GetCapabilities)
  747.       (JVMDI_capabilities *capabilitiesPtr);
  748. } JVMDI_Interface_1;
  749.  
  750. #ifndef NO_JVMDI_MACROS
  751.  
  752. #define JVMDI_ERROR_DUPLICATE_BREAKPOINT JVMDI_ERROR_DUPLICATE
  753. #define JVMDI_ERROR_NO_SUCH_BREAKPOINT   JVMDI_ERROR_NOT_FOUND
  754. #define JVMDI_ERROR_DUPLICATE_FRAME_POP  JVMDI_ERROR_DUPLICATE
  755.  
  756.  
  757. static JVMDI_Interface_1 *jvmdi_interface = NULL;
  758. static JavaVM *j_vm;
  759.  
  760. #ifdef __cplusplus
  761. #define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)?  \
  762.               ((a_env)->GetJavaVM(&j_vm),  \
  763.                (j_vm)->GetEnv((void **)&jvmdi_interface,  \
  764.                                JVMDI_VERSION_1)):0)
  765. #else
  766. #define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)?  \
  767.               ((*a_env)->GetJavaVM(a_env, &j_vm), \
  768.                (*j_vm)->GetEnv(j_vm, (void **)&jvmdi_interface, \
  769.                                JVMDI_VERSION_1)):0)
  770. #endif
  771.  
  772. #define JVMDI_SetEventHook(a_env, a1) ( \
  773.               SetJVMDIfromJNIEnv(a_env), \
  774.               jvmdi_interface->SetEventHook(a1) )
  775. #define JVMDI_GetThreadStatus(a_env, a1, a2, a3) ( \
  776.               SetJVMDIfromJNIEnv(a_env), \
  777.               jvmdi_interface->GetThreadStatus(a1, a2, a3) )
  778. #define JVMDI_GetAllThreads(a_env, a1, a2) ( \
  779.               SetJVMDIfromJNIEnv(a_env), \
  780.               jvmdi_interface->GetAllThreads(a1, a2) )
  781. #define JVMDI_SuspendThread(a_env, a1) ( \
  782.               SetJVMDIfromJNIEnv(a_env), \
  783.               jvmdi_interface->SuspendThread(a1) )
  784. #define JVMDI_ResumeThread(a_env, a1) ( \
  785.               SetJVMDIfromJNIEnv(a_env), \
  786.               jvmdi_interface->ResumeThread(a1) )
  787. #define JVMDI_StopThread(a_env, a1, a2) ( \
  788.               SetJVMDIfromJNIEnv(a_env), \
  789.               jvmdi_interface->StopThread(a1, a2) )
  790. #define JVMDI_InterruptThread(a_env, a1) ( \
  791.               SetJVMDIfromJNIEnv(a_env), \
  792.               jvmdi_interface->InterruptThread(a1) )
  793. #define JVMDI_SetSingleStep(a_env, a1, a2) ( \
  794.               SetJVMDIfromJNIEnv(a_env), \
  795.               jvmdi_interface->SetEventNotificationMode( \
  796.                                        (a2) ? JVMDI_ENABLE : JVMDI_DISABLE, \
  797.                                         JVMDI_EVENT_SINGLE_STEP, a1) )
  798. #define JVMDI_GetThreadInfo(a_env, a1, a2) ( \
  799.               SetJVMDIfromJNIEnv(a_env), \
  800.               jvmdi_interface->GetThreadInfo(a1, a2) )
  801. #define JVMDI_RunDebugThread(a_env, a1, a2, a3, a4) ( \
  802.               SetJVMDIfromJNIEnv(a_env), \
  803.               jvmdi_interface->RunDebugThread(a1, a2, a3, a4) )
  804. #define JVMDI_GetTopThreadGroups(a_env, a1, a2) ( \
  805.               SetJVMDIfromJNIEnv(a_env), \
  806.               jvmdi_interface->GetTopThreadGroups(a1, a2) )
  807. #define JVMDI_GetThreadGroupInfo(a_env, a1, a2) ( \
  808.               SetJVMDIfromJNIEnv(a_env), \
  809.               jvmdi_interface->GetThreadGroupInfo(a1, a2) )
  810. #define JVMDI_GetThreadGroupChildren(a_env, a1, a2, a3, a4, a5) ( \
  811.               SetJVMDIfromJNIEnv(a_env), \
  812.               jvmdi_interface->GetThreadGroupChildren(a1, a2, a3, a4, a5) )
  813. #define JVMDI_GetCurrentFrame(a_env, a1, a2) ( \
  814.               SetJVMDIfromJNIEnv(a_env), \
  815.               jvmdi_interface->GetCurrentFrame(a1, a2) )
  816. #define JVMDI_GetCallerFrame(a_env, a1, a2) ( \
  817.               SetJVMDIfromJNIEnv(a_env), \
  818.               jvmdi_interface->GetCallerFrame(a1, a2) )
  819. #define JVMDI_GetFrameLocation(a_env, a1, a2, a3, a4) ( \
  820.               SetJVMDIfromJNIEnv(a_env), \
  821.               jvmdi_interface->GetFrameLocation(a1, a2, a3, a4) )
  822. #define JVMDI_NotifyFramePop(a_env, a1) ( \
  823.               SetJVMDIfromJNIEnv(a_env), \
  824.               jvmdi_interface->NotifyFramePop(a1) )
  825. #define JVMDI_GetLocalObject(a_env, a1, a2, a3) ( \
  826.               SetJVMDIfromJNIEnv(a_env), \
  827.               jvmdi_interface->GetLocalObject(a1, a2, a3) )
  828. #define JVMDI_GetLocalInt(a_env, a1, a2, a3) ( \
  829.               SetJVMDIfromJNIEnv(a_env), \
  830.               jvmdi_interface->GetLocalInt(a1, a2, a3) )
  831. #define JVMDI_GetLocalLong(a_env, a1, a2, a3) ( \
  832.               SetJVMDIfromJNIEnv(a_env), \
  833.               jvmdi_interface->GetLocalLong(a1, a2, a3) )
  834. #define JVMDI_GetLocalFloat(a_env, a1, a2, a3) ( \
  835.               SetJVMDIfromJNIEnv(a_env), \
  836.               jvmdi_interface->GetLocalFloat(a1, a2, a3) )
  837. #define JVMDI_GetLocalDouble(a_env, a1, a2, a3) ( \
  838.               SetJVMDIfromJNIEnv(a_env), \
  839.               jvmdi_interface->GetLocalDouble(a1, a2, a3) )
  840. #define JVMDI_SetLocalObject(a_env, a1, a2, a3) ( \
  841.               SetJVMDIfromJNIEnv(a_env), \
  842.               jvmdi_interface->SetLocalObject(a1, a2, a3) )
  843. #define JVMDI_SetLocalInt(a_env, a1, a2, a3) ( \
  844.               SetJVMDIfromJNIEnv(a_env), \
  845.               jvmdi_interface->SetLocalInt(a1, a2, a3) )
  846. #define JVMDI_SetLocalLong(a_env, a1, a2, a3) ( \
  847.               SetJVMDIfromJNIEnv(a_env), \
  848.               jvmdi_interface->SetLocalLong(a1, a2, a3) )
  849. #define JVMDI_SetLocalFloat(a_env, a1, a2, a3) ( \
  850.               SetJVMDIfromJNIEnv(a_env), \
  851.               jvmdi_interface->SetLocalFloat(a1, a2, a3) )
  852. #define JVMDI_SetLocalDouble(a_env, a1, a2, a3) ( \
  853.               SetJVMDIfromJNIEnv(a_env), \
  854.               jvmdi_interface->SetLocalDouble(a1, a2, a3) )
  855. #define JVMDI_CreateRawMonitor(a_env, a1, a2) ( \
  856.               SetJVMDIfromJNIEnv(a_env), \
  857.               jvmdi_interface->CreateRawMonitor(a1, a2) )
  858. #define JVMDI_DestroyRawMonitor(a_env, a1) ( \
  859.               SetJVMDIfromJNIEnv(a_env), \
  860.               jvmdi_interface->DestroyRawMonitor(a1) )
  861. #define JVMDI_RawMonitorEnter(a_env, a1) ( \
  862.               SetJVMDIfromJNIEnv(a_env), \
  863.               jvmdi_interface->RawMonitorEnter(a1) )
  864. #define JVMDI_RawMonitorExit(a_env, a1) ( \
  865.               SetJVMDIfromJNIEnv(a_env), \
  866.               jvmdi_interface->RawMonitorExit(a1) )
  867. #define JVMDI_RawMonitorWait(a_env, a1, a2) ( \
  868.               SetJVMDIfromJNIEnv(a_env), \
  869.               jvmdi_interface->RawMonitorWait(a1, a2) )
  870. #define JVMDI_RawMonitorNotify(a_env, a1) ( \
  871.               SetJVMDIfromJNIEnv(a_env), \
  872.               jvmdi_interface->RawMonitorNotify(a1) )
  873. #define JVMDI_RawMonitorNotifyAll(a_env, a1) ( \
  874.               SetJVMDIfromJNIEnv(a_env), \
  875.               jvmdi_interface->RawMonitorNotifyAll(a1) )
  876. #define JVMDI_SetBreakpoint(a_env, a1, a2, a3) ( \
  877.               SetJVMDIfromJNIEnv(a_env), \
  878.               jvmdi_interface->SetBreakpoint(a1, a2, a3) )
  879. #define JVMDI_ClearBreakpoint(a_env, a1, a2, a3) ( \
  880.               SetJVMDIfromJNIEnv(a_env), \
  881.               jvmdi_interface->ClearBreakpoint(a1, a2, a3) )
  882. #define JVMDI_ClearAllBreakpoints(a_env) ( \
  883.               SetJVMDIfromJNIEnv(a_env), \
  884.               jvmdi_interface->ClearAllBreakpoints(void) )    /*ibm@6609*/
  885. #define JVMDI_SetAllocationHooks(a_env, a1, a2) ( \
  886.               SetJVMDIfromJNIEnv(a_env), \
  887.               jvmdi_interface->SetAllocationHooks(a1, a2) )
  888. #define JVMDI_Allocate(a_env, a1, a2) ( \
  889.               SetJVMDIfromJNIEnv(a_env), \
  890.               jvmdi_interface->Allocate(a1, a2) )
  891. #define JVMDI_Deallocate(a_env, a1) ( \
  892.               SetJVMDIfromJNIEnv(a_env), \
  893.               jvmdi_interface->Deallocate(a1) )
  894. #define JVMDI_GetClassSignature(a_env, a1, a2) ( \
  895.               SetJVMDIfromJNIEnv(a_env), \
  896.               jvmdi_interface->GetClassSignature(a1, a2) )
  897. #define JVMDI_GetClassStatus(a_env, a1, a2) ( \
  898.               SetJVMDIfromJNIEnv(a_env), \
  899.               jvmdi_interface->GetClassStatus(a1, a2) )
  900. #define JVMDI_GetSourceFileName(a_env, a1, a2) ( \
  901.               SetJVMDIfromJNIEnv(a_env), \
  902.               jvmdi_interface->GetSourceFileName(a1, a2) )
  903. #define JVMDI_GetClassModifiers(a_env, a1, a2) ( \
  904.               SetJVMDIfromJNIEnv(a_env), \
  905.               jvmdi_interface->GetClassModifiers(a1, a2) )
  906. #define JVMDI_GetClassMethods(a_env, a1, a2, a3) ( \
  907.               SetJVMDIfromJNIEnv(a_env), \
  908.               jvmdi_interface->GetClassMethods(a1, a2, a3) )
  909. #define JVMDI_GetClassFields(a_env, a1, a2, a3) ( \
  910.               SetJVMDIfromJNIEnv(a_env), \
  911.               jvmdi_interface->GetClassFields(a1, a2, a3) )
  912. #define JVMDI_GetImplementedInterfaces(a_env, a1, a2, a3) ( \
  913.               SetJVMDIfromJNIEnv(a_env), \
  914.               jvmdi_interface->GetImplementedInterfaces(a1, a2, a3) )
  915. #define JVMDI_IsInterface(a_env, a1, a2) ( \
  916.               SetJVMDIfromJNIEnv(a_env), \
  917.               jvmdi_interface->IsInterface(a1, a2) )
  918. #define JVMDI_IsArrayClass(a_env, a1, a2) ( \
  919.               SetJVMDIfromJNIEnv(a_env), \
  920.               jvmdi_interface->IsArrayClass(a1, a2) )
  921. #define JVMDI_ClassLoader(a_env, a1, a2) ( \
  922.               SetJVMDIfromJNIEnv(a_env), \
  923.               jvmdi_interface->GetClassLoader(a1, a2) )
  924. #define JVMDI_GetFieldName(a_env, a1, a2, a3, a4) ( \
  925.               SetJVMDIfromJNIEnv(a_env), \
  926.               jvmdi_interface->GetFieldName(a1, a2, a3, a4) )
  927. #define JVMDI_GetFieldDeclaringClass(a_env, a1, a2, a3) ( \
  928.               SetJVMDIfromJNIEnv(a_env), \
  929.               jvmdi_interface->GetFieldDeclaringClass(a1, a2, a3) )
  930. #define JVMDI_GetFieldModifiers(a_env, a1, a2, a3) ( \
  931.               SetJVMDIfromJNIEnv(a_env), \
  932.               jvmdi_interface->GetFieldModifiers(a1, a2, a3) )
  933. #define JVMDI_GetMethodName(a_env, a1, a2, a3, a4) ( \
  934.               SetJVMDIfromJNIEnv(a_env), \
  935.               jvmdi_interface->GetMethodName(a1, a2, a3, a4) )
  936. #define JVMDI_GetMethodDeclaringClass(a_env, a1, a2, a3) ( \
  937.               SetJVMDIfromJNIEnv(a_env), \
  938.               jvmdi_interface->GetMethodDeclaringClass(a1, a2, a3) )
  939. #define JVMDI_GetMethodModifiers(a_env, a1, a2, a3) ( \
  940.               SetJVMDIfromJNIEnv(a_env), \
  941.               jvmdi_interface->GetMethodModifiers(a1, a2, a3) )
  942. #define JVMDI_GetMaxStack(a_env, a1, a2, a3) ( \
  943.               SetJVMDIfromJNIEnv(a_env), \
  944.               jvmdi_interface->GetMaxStack(a1, a2, a3) )
  945. #define JVMDI_GetMaxLocals(a_env, a1, a2, a3) ( \
  946.               SetJVMDIfromJNIEnv(a_env), \
  947.               jvmdi_interface->GetMaxLocals(a1, a2, a3) )
  948. #define JVMDI_GetArgumentsSize(a_env, a1, a2, a3) ( \
  949.               SetJVMDIfromJNIEnv(a_env), \
  950.               jvmdi_interface->GetArgumentsSize(a1, a2, a3) )
  951. #define JVMDI_GetLineNumberTable(a_env, a1, a2, a3, a4) ( \
  952.               SetJVMDIfromJNIEnv(a_env), \
  953.               jvmdi_interface->GetLineNumberTable(a1, a2, a3, a4) )
  954. #define JVMDI_GetMethodLocation(a_env, a1, a2, a3, a4) ( \
  955.               SetJVMDIfromJNIEnv(a_env), \
  956.               jvmdi_interface->GetMethodLocation(a1, a2, a3, a4) )
  957. #define JVMDI_GetLocalVariableTable(a_env, a1, a2, a3, a4) ( \
  958.               SetJVMDIfromJNIEnv(a_env), \
  959.               jvmdi_interface->GetLocalVariableTable(a1, a2, a3, a4) )
  960. #define JVMDI_GetExceptionHandlerTable(a_env, a1, a2, a3, a4) ( \
  961.               SetJVMDIfromJNIEnv(a_env), \
  962.               jvmdi_interface->GetExceptionHandlerTable(a1, a2, a3, a4) )
  963. #define JVMDI_GetThrownExceptions(a_env, a1, a2, a3, a4) ( \
  964.               SetJVMDIfromJNIEnv(a_env), \
  965.               jvmdi_interface->GetThrownExceptions(a1, a2, a3, a4) )
  966. #define JVMDI_GetBytecodes(a_env, a1, a2, a3, a4) ( \
  967.               SetJVMDIfromJNIEnv(a_env), \
  968.               jvmdi_interface->GetBytecodes(a1, a2, a3, a4) )
  969. #define JVMDI_IsMethodNative(a_env, a1, a2, a3) ( \
  970.               SetJVMDIfromJNIEnv(a_env), \
  971.               jvmdi_interface->IsMethodNative(a1, a2, a3) )
  972. #define JVMDI_GetLoadedClasses(a_env, a1, a2) ( \
  973.               SetJVMDIfromJNIEnv(a_env), \
  974.               jvmdi_interface->GetLoadedClasses(a1, a2) )
  975. #define JVMDI_GetClassLoaderClasses(a_env, a1, a2, a3) ( \
  976.               SetJVMDIfromJNIEnv(a_env), \
  977.               jvmdi_interface->GetClassLoaderClasses(a1, a2, a3) )
  978. #define JVMDI_GetVersionNumber(a_env, a1) ( \
  979.               SetJVMDIfromJNIEnv(a_env), \
  980.               jvmdi_interface->GetVersionNumber(a1) )
  981. /*ibm@25989*/
  982. #define JVMDI_SetEventNotificationMode(a_env, a1, a2, a3) ( \
  983.               SetJVMDIfromJNIEnv(a_env), \
  984.               jvmdi_interface->SetEventNotificationMode( \
  985.                                (a1) ? JVMDI_ENABLE : JVMDI_DISABLE, \
  986.                                a2, a3) )
  987.  
  988. #endif /* !NO_JVMDI_MACROS */
  989.  
  990. #ifdef __cplusplus
  991. } /* extern "C" */
  992. #endif /* __cplusplus */
  993.  
  994. #endif /* !_JAVASOFT_JVMDI_H_ */
  995.  
  996.  
  997.