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