1 /* jvmti.h - Java Virtual Machine Tool Interface
2    Copyright (C) 2006  Free Software Foundation
3 
4 This file is part of GNU Classpath.
5 
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10 
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING.  If not, write to the
18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301 USA.
20 
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library.  Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
25 
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module.  An independent module is a module which is not derived from
33 or based on this library.  If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so.  If you do not wish to do so, delete this
36 exception statement from your version. */
37 
38 
39 /* Note: this file must be compilable by the C compiler (for now,
40    assuming GNU C is ok).  This means you must never use `//'
41    comments, and all C++-specific code must be conditional on
42    __cplusplus.  */
43 
44 #ifndef _CLASSPATH_JVMTI_H
45 #define _CLASSPATH_JVMTI_H
46 #include <jni.h>
47 
48 #include "jvmti_md.h"
49 
50 /* The VM might define JVMTI base types */
51 #ifndef _CLASSPATH_VM_JVMTI_TYPES_DEFINED
52 
53 typedef jobject jthread;
54 typedef jobject jthreadGroup;
55 typedef jlong jlocation;
56 typedef struct _Jv_rawMonitorID *jrawMonitorID;
57 
58 #endif /* !_CLASSPATH_VM_JVMTI_TYPES_DEFINED */
59 
60 /* JVMTI Version */
61 #define JVMTI_VERSION_1_0 0x30010000
62 #define JVMTI_VERSION (JVMTI_VERSION_1_0 + 38)  /* Spec version is 1.0.38 */
63 
64 #ifdef __cplusplus
65 extern "C"
66 {
67 #endif
68 
69 /* These functions might be defined in libraries which we load; the
70    JVMTI implementation calls them at the appropriate times.  */
71 extern JNIEXPORT jint JNICALL Agent_OnLoad (JavaVM *vm, char *options,
72 					    void *reserved);
73 extern JNIEXPORT void JNICALL Agent_OnUnload (JavaVM *vm);
74 
75 #ifdef __cplusplus
76 }
77 #endif
78 
79 /* Forward declarations */
80 typedef struct _jvmtiAddrLocationMap jvmtiAddrLocationMap;
81 #ifdef __cplusplus
82 typedef struct _Jv_JVMTIEnv jvmtiEnv;
83 #else
84 typedef const struct _Jv_jvmtiEnv *jvmtiEnv;
85 #endif
86 
87 /*
88  * Error constants
89  */
90 
91 typedef enum
92 {
93   /* Universal Errors */
94   JVMTI_ERROR_NONE = 0,
95   JVMTI_ERROR_NULL_POINTER = 100,
96   JVMTI_ERROR_OUT_OF_MEMORY = 110,
97   JVMTI_ERROR_ACCESS_DENIED = 111,
98   JVMTI_ERROR_WRONG_PHASE = 112,
99   JVMTI_ERROR_INTERNAL = 113,
100   JVMTI_ERROR_UNATTACHED_THREAD = 115,
101   JVMTI_ERROR_INVALID_ENVIRONMENT = 116,
102 
103   /* Function-specific Required Errors */
104   JVMTI_ERROR_INVALID_PRIORITY = 12,
105   JVMTI_ERROR_THREAD_NOT_SUSPENDED = 13,
106   JVMTI_ERROR_THREAD_SUSPENDED = 14,
107   JVMTI_ERROR_THREAD_NOT_ALIVE = 15,
108   JVMTI_ERROR_CLASS_NOT_PREPARED = 22,
109   JVMTI_ERROR_NO_MORE_FRAMES = 31,
110   JVMTI_ERROR_OPAQUE_FRAME = 32,
111   JVMTI_ERROR_DUPLICATE = 40,
112   JVMTI_ERROR_NOT_FOUND = 41,
113   JVMTI_ERROR_NOT_MONITOR_OWNER = 51,
114   JVMTI_ERROR_INTERRUPT = 52,
115   JVMTI_ERROR_UNMODIFIABLE_CLASS = 79,
116   JVMTI_ERROR_NOT_AVAILABLE = 98,
117   JVMTI_ERROR_ABSENT_INFORMATION = 101,
118   JVMTI_ERROR_INVALID_EVENT_TYPE = 102,
119   JVMTI_ERROR_NATIVE_METHOD = 104,
120 
121   /* Function-specific Agent Errors */
122   JVMTI_ERROR_INVALID_THREAD = 10,
123   JVMTI_ERROR_INVALID_THREAD_GROUP = 11,
124   JVMTI_ERROR_INVALID_OBJECT = 20,
125   JVMTI_ERROR_INVALID_CLASS = 21,
126   JVMTI_ERROR_INVALID_METHODID = 23,
127   JVMTI_ERROR_INVALID_LOCATION = 24,
128   JVMTI_ERROR_INVALID_FIELDID = 25,
129   JVMTI_ERROR_TYPE_MISMATCH = 34,
130   JVMTI_ERROR_INVALID_SLOT = 35,
131   JVMTI_ERROR_INVALID_MONITOR = 50,
132   JVMTI_ERROR_INVALID_CLASS_FORMAT = 60,
133   JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION = 61,
134   JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED = 63,
135   JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED = 64,
136   JVMTI_ERROR_INVALID_TYPESTATE = 65,
137   JVMTI_ERROR_FAILS_VERIFICATION = 62,
138   JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED = 66,
139   JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED = 67,
140   JVMTI_ERROR_UNSUPPORTED_VERSION = 68,
141   JVMTI_ERROR_NAMES_DONT_MATCH = 69,
142   JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED = 70,
143   JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED = 71,
144   JVMTI_ERROR_MUST_POSSESS_CAPABILITY = 99,
145   JVMTI_ERROR_ILLEGAL_ARGUMENT = 103
146 } jvmtiError;
147 
148 /*
149  * Enumeration Definitions
150  */
151 
152 typedef enum
153 {
154   JVMTI_DISABLE = 0,
155   JVMTI_ENABLE = 1
156 } jvmtiEventMode;
157 
158 typedef enum
159 {
160   JVMTI_HEAP_OBJECT_TAGGED = 1,
161   JVMTI_HEAP_OBJECT_UNTAGGED = 2,
162   JVMTI_HEAP_OBJECT_EITHER = 3
163 } jvmtiHeapObjectFilter;
164 
165 typedef enum
166 {
167   JVMTI_HEAP_ROOT_JNI_GLOBAL = 1,
168   JVMTI_HEAP_ROOT_SYSTEM_CLASS = 2,
169   JVMTI_HEAP_ROOT_MONITOR = 3,
170   JVMTI_HEAP_ROOT_STACK_LOCAL = 4,
171   JVMTI_HEAP_ROOT_JNI_LOCAL = 5,
172   JVMTI_HEAP_ROOT_THREAD = 6,
173   JVMTI_HEAP_ROOT_OTHER = 7
174 } jvmtiHeapRootKind;
175 
176 typedef enum
177 {
178   JVMTI_ITERATION_ABORT = 0,
179   JVMTI_ITERATION_CONTINUE = 1,
180   JVMTI_ITERATION_IGNORE = 2
181 } jvmtiIterationControl;
182 
183 typedef enum
184 {
185   JVMTI_JLOCATION_OTHER = 0,
186   JVMTI_JLOCATION_JVMBCI = 1,
187   JVMTI_JLOCATION_MACHINEPC = 2
188 } jvmtiJlocationFormat;
189 
190 typedef enum
191 {
192   JVMTI_REFERENCE_CLASS = 1,
193   JVMTI_REFERENCE_FIELD = 2,
194   JVMTI_REFERENCE_ARRAY_ELEMENT = 3,
195   JVMTI_REFERENCE_CLASS_LOADER = 4,
196   JVMTI_REFERENCE_SIGNERS = 5,
197   JVMTI_REFERENCE_PROTECTION_DOMAIN = 6,
198   JVMTI_REFERENCE_INTERFACE = 7,
199   JVMTI_REFERENCE_STATIC_FIELD = 8,
200   JVMTI_REFERENCE_CONSTANT_POOL = 9
201 } jvmtiObjectReferenceKind;
202 
203 typedef enum
204 {
205   JVMTI_KIND_IN = 91,
206   JVMTI_KIND_IN_PTR = 92,
207   JVMTI_KIND_IN_BUF = 93,
208   JVMTI_KIND_ALLOC_BUF = 94,
209   JVMTI_KIND_ALLOC_ALLOC_BUF = 95,
210   JVMTI_KIND_OUT = 96,
211   JVMTI_KIND_OUT_BUF = 97
212 } jvmtiParamKind;
213 
214 typedef enum
215 {
216   JVMTI_TYPE_JBYTE = 101,
217   JVMTI_TYPE_JCHAR = 102,
218   JVMTI_TYPE_JSHORT = 103,
219   JVMTI_TYPE_JINT = 104,
220   JVMTI_TYPE_JLONG = 105,
221   JVMTI_TYPE_JFLOAT = 106,
222   JVMTI_TYPE_JDOUBLE = 107,
223   JVMTI_TYPE_JBOOLEAN = 108,
224   JVMTI_TYPE_JOBJECT = 109,
225   JVMTI_TYPE_JTHREAD = 110,
226   JVMTI_TYPE_JCLASS = 111,
227   JVMTI_TYPE_JVALUE = 112,
228   JVMTI_TYPE_JFIELDID = 113,
229   JVMTI_TYPE_JMETHODID = 114,
230   JVMTI_TYPE_CCHAR = 115,
231   JVMTI_TYPE_CVOID = 116,
232   JVMTI_TYPE_JNIENV = 117
233 } jvmtiParamTypes;
234 
235 typedef enum
236 {
237   JVMTI_PHASE_ONLOAD = 1,
238   JVMTI_PHASE_PRIMORDIAL = 2,
239   JVMTI_PHASE_LIVE = 4,
240   JVMTI_PHASE_START = 6,
241   JVMTI_PHASE_DEAD = 8
242 } jvmtiPhase;
243 
244 typedef enum
245 {
246   JVMTI_TIMER_USER_CPU = 30,
247   JVMTI_TIMER_TOTAL_CPU = 31,
248   JVMTI_TIMER_ELAPSED = 32
249 } jvmtiTimerKind;
250 
251 typedef enum
252 {
253   JVMTI_VERBOSE_OTHER = 0,
254   JVMTI_VERBOSE_GC = 1,
255   JVMTI_VERBOSE_CLASS = 2,
256   JVMTI_VERBOSE_JNI = 4
257 } jvmtiVerboseFlag;
258 
259 /* Version information */
260 #define JVMTI_VERSION_INTERFACE_JNI 0x00000000
261 #define JVMTI_VERSION_INTERFACE_JVMTI 0x30000000
262 #define JVMTI_VERSION_MASK_INTERFACE_TYPE 0x70000000
263 #define JVMTI_VERSION_MASK_MAJOR 0x0FFF0000
264 #define JVMTI_VERSION_MASK_MINOR 0x0000FF00
265 #define JVMTI_VERSION_MASK_MICRO 0x000000FF
266 #define JVMTI_VERSION_SHIFT_MAJOR 16
267 #define JVMTI_VERSION_SHIFT_MINOR 8
268 #define JVMTI_VERSION_SHIFT_MICRO 0
269 
270 /*
271  * Events and event callbacks
272  */
273 
274 typedef enum
275 {
276   JVMTI_EVENT_VM_INIT = 50,
277   JVMTI_EVENT_VM_DEATH = 51,
278   JVMTI_EVENT_THREAD_START = 52,
279   JVMTI_EVENT_THREAD_END = 53,
280   JVMTI_EVENT_CLASS_FILE_LOAD_HOOK = 54,
281   JVMTI_EVENT_CLASS_LOAD = 55,
282   JVMTI_EVENT_CLASS_PREPARE = 56,
283   JVMTI_EVENT_VM_START = 57,
284   JVMTI_EVENT_EXCEPTION = 58,
285   JVMTI_EVENT_EXCEPTION_CATCH = 59,
286   JVMTI_EVENT_SINGLE_STEP =  60,
287   JVMTI_EVENT_FRAME_POP = 61,
288   JVMTI_EVENT_BREAKPOINT = 62,
289   JVMTI_EVENT_FIELD_ACCESS = 63,
290   JVMTI_EVENT_FIELD_MODIFICATION = 64,
291   JVMTI_EVENT_METHOD_ENTRY = 65,
292   JVMTI_EVENT_METHOD_EXIT = 66,
293   JVMTI_EVENT_NATIVE_METHOD_BIND = 67,
294   JVMTI_EVENT_COMPILED_METHOD_LOAD = 68,
295   JVMTI_EVENT_COMPILED_METHOD_UNLOAD = 69,
296   JVMTI_EVENT_DYNAMIC_CODE_GENERATED = 70,
297   JVMTI_EVENT_DATA_DUMP_REQUEST = 71,
298   JVMTI_EVENT_MONITOR_WAIT = 73,
299   JVMTI_EVENT_MONITOR_WAITED = 74,
300   JVMTI_EVENT_MONITOR_CONTENDED_ENTER = 75,
301   JVMTI_EVENT_MONITOR_CONTENDED_ENTERED = 76,
302   JVMTI_EVENT_GARBAGE_COLLECTION_START = 81,
303   JVMTI_EVENT_GARBAGE_COLLECTION_FINISH = 82,
304   JVMTI_EVENT_OBJECT_FREE = 83,
305   JVMTI_EVENT_VM_OBJECT_ALLOC = 84
306 } jvmtiEvent;
307 
308 typedef void *jvmtiEventReserved;
309 
310 typedef void (JNICALL *jvmtiEventSingleStep)
311   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
312    jlocation location);
313 
314 typedef void (JNICALL *jvmtiEventBreakpoint)
315   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
316    jlocation location);
317 
318 typedef void (JNICALL *jvmtiEventFieldAccess)
319   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
320    jlocation location, jclass field_klass, jobject object, jfieldID field);
321 
322 typedef void (JNICALL *jvmtiEventFieldModification)
323   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
324    jlocation location, jclass field_klass, jobject object, jfieldID field,
325    char signature_type, jvalue new_value);
326 
327 typedef void (JNICALL *jvmtiEventFramePop)
328   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
329    jboolean was_popped_by_exception);
330 
331 typedef void (JNICALL *jvmtiEventMethodEntry)
332   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method);
333 
334 typedef void (JNICALL *jvmtiEventMethodExit)
335   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
336    jboolean was_popped_by_exception, jvalue return_value);
337 
338 typedef void (JNICALL *jvmtiEventNativeMethodBind)
339   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
340    void *address, void **new_address_ptr);
341 
342 typedef void (JNICALL *jvmtiEventException)
343   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
344    jlocation location, jobject exception, jmethodID catch_method,
345    jlocation catch_location);
346 
347 typedef void (JNICALL *jvmtiEventExceptionCatch)
348   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jmethodID method,
349    jlocation location, jobject exception);
350 
351 typedef void (JNICALL *jvmtiEventThreadStart)
352   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread);
353 
354 typedef void (JNICALL *jvmtiEventThreadEnd)
355   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread);
356 
357 typedef void (JNICALL *jvmtiEventClassLoad)
358   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jclass klass);
359 
360 typedef void (JNICALL *jvmtiEventClassPrepare)
361   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thraed, jclass klass);
362 
363 typedef void (JNICALL *jvmtiEventClassFileLoadHook)
364   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jclass class_being_redefined,
365    jobject loader, const char *name, jobject protection_domain,
366    jint class_data_len, const unsigned char *class_data,
367    jint *new_class_data_len, unsigned char **new_class_data);
368 
369 typedef void (JNICALL *jvmtiEventVMStart)
370   (jvmtiEnv *jvmti_env, JNIEnv *jni_env);
371 
372 typedef void (JNICALL *jvmtiEventVMInit)
373   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread);
374 
375 typedef void (JNICALL *jvmtiEventVMDeath)
376   (jvmtiEnv *jvmti_env, JNIEnv *jni_env);
377 
378 typedef void (JNICALL *jvmtiEventCompiledMethodLoad)
379   (jvmtiEnv *jvmti_env, jmethodID method, jint code_size,
380    const void *code_addr, jint map_length, const jvmtiAddrLocationMap *map,
381    const void *compile_info);
382 
383 typedef void (JNICALL *jvmtiEventCompiledMethodUnload)
384   (jvmtiEnv *jvmti_env, jmethodID method, const void *code_addr);
385 
386 typedef void (JNICALL *jvmtiEventDynamicCodeGenerated)
387   (jvmtiEnv *jvmti_env, const char *name, const void *address, jint length);
388 
389 typedef void (JNICALL *jvmtiEventDataDumpRequest)
390   (jvmtiEnv *jvmti_env);
391 
392 typedef void (JNICALL *jvmtiEventMonitorContendedEnter)
393   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jobject object);
394 
395 typedef void (JNICALL *jvmtiEventMonitorContendedEntered)
396   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jobject object);
397 
398 typedef void (JNICALL *jvmtiEventMonitorWait)
399   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jobject object,
400    jlong timeout);
401 
402 typedef void (JNICALL *jvmtiEventMonitorWaited)
403   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jobject object,
404    jboolean timed_out);
405 
406 typedef void (JNICALL *jvmtiEventVMObjectAlloc)
407   (jvmtiEnv *jvmti_env, JNIEnv *jni_env, jthread thread, jobject object,
408    jclass object_klass, jlong size);
409 
410 typedef void (JNICALL *jvmtiEventObjectFree)
411   (jvmtiEnv *jvmti_env, jlong tag);
412 
413 typedef void (JNICALL *jvmtiEventGarbageCollectionStart)
414   (jvmtiEnv *jvmti_env);
415 
416 typedef void (JNICALL *jvmtiEventGarbageCollectionFinish)
417   (jvmtiEnv *jvmti_env);
418 
419 typedef struct
420 {
421   jvmtiEventVMInit VMInit;
422   jvmtiEventVMDeath VMDeath;
423   jvmtiEventThreadStart ThreadStart;
424   jvmtiEventThreadEnd ThreadEnd;
425   jvmtiEventClassFileLoadHook ClassFileLoadHook;
426   jvmtiEventClassLoad ClassLoad;
427   jvmtiEventClassPrepare ClassPrepare;
428   jvmtiEventVMStart VMStart;
429   jvmtiEventException Exception;
430   jvmtiEventExceptionCatch ExceptionCatch;
431   jvmtiEventSingleStep SingleStep;
432   jvmtiEventFramePop FramePop;
433   jvmtiEventBreakpoint Breakpoint;
434   jvmtiEventFieldAccess FieldAccess;
435   jvmtiEventFieldModification FieldModification;
436   jvmtiEventMethodEntry MethodEntry;
437   jvmtiEventMethodExit MethodExit;
438   jvmtiEventNativeMethodBind NativeMethodBind;
439   jvmtiEventCompiledMethodLoad CompiledMethodLoad;
440   jvmtiEventCompiledMethodUnload CompiledMethodUnload;
441   jvmtiEventDynamicCodeGenerated DynamicCodeGenerated;
442   jvmtiEventDataDumpRequest DataDumpRequest;
443   jvmtiEventReserved reserved72;
444   jvmtiEventMonitorWait MonitorWait;
445   jvmtiEventMonitorWaited MonitorWaited;
446   jvmtiEventMonitorContendedEnter MonitorContendedEnter;
447   jvmtiEventMonitorContendedEntered MonitorContendedEntered;
448   jvmtiEventReserved reserved77;
449   jvmtiEventReserved reserved78;
450   jvmtiEventReserved reserved79;
451   jvmtiEventReserved reserved80;
452   jvmtiEventGarbageCollectionStart GarbageCollectionStart;
453   jvmtiEventGarbageCollectionFinish GarbageCollectionFinish;
454   jvmtiEventObjectFree ObjectFree;
455   jvmtiEventVMObjectAlloc VMObjectAlloc;
456 } jvmtiEventCallbacks;
457 
458 /*
459  * Function and Structure Type Definitions
460  */
461 
462 struct _jvmtiAddrLocationMap
463 {
464   const void *start_address;
465   jlocation location;
466 };
467 
468 typedef struct
469 {
470   unsigned int can_tag_objects : 1;
471   unsigned int can_generate_field_modification_events : 1;
472   unsigned int can_generate_field_access_events : 1;
473   unsigned int can_get_bytecodes : 1;
474   unsigned int can_get_synthetic_attribute : 1;
475   unsigned int can_get_owned_monitor_info : 1;
476   unsigned int can_get_current_contended_monitor : 1;
477   unsigned int can_get_monitor_info : 1;
478   unsigned int can_pop_frame : 1;
479   unsigned int can_redefine_classes : 1;
480   unsigned int can_signal_thread : 1;
481   unsigned int can_get_source_file_name : 1;
482   unsigned int can_get_line_numbers : 1;
483   unsigned int can_get_source_debug_extension : 1;
484   unsigned int can_access_local_variables : 1;
485   unsigned int can_maintain_original_method_order : 1;
486   unsigned int can_generate_single_step_events : 1;
487   unsigned int can_generate_exception_events : 1;
488   unsigned int can_generate_frame_pop_events : 1;
489   unsigned int can_generate_breakpoint_events : 1;
490   unsigned int can_suspend : 1;
491   unsigned int can_redefine_any_class : 1;
492   unsigned int can_get_current_thread_cpu_time : 1;
493   unsigned int can_get_thread_cpu_time : 1;
494   unsigned int can_generate_method_entry_events : 1;
495   unsigned int can_generate_method_exit_events : 1;
496   unsigned int can_generate_all_class_hook_events : 1;
497   unsigned int can_generate_compiled_method_load_events : 1;
498   unsigned int can_generate_monitor_events : 1;
499   unsigned int can_generate_vm_object_alloc_events : 1;
500   unsigned int can_generate_native_method_bind_events : 1;
501   unsigned int can_generate_garbage_collection_events : 1;
502   unsigned int can_generate_object_free_events : 1;
503   unsigned int : 15;
504   unsigned int : 16;
505   unsigned int : 16;
506   unsigned int : 16;
507   unsigned int : 16;
508   unsigned int : 16;
509 } jvmtiCapabilities;
510 
511 typedef struct
512 {
513   jclass klass;
514   jint class_byte_count;
515   const unsigned char *class_bytes;
516 } jvmtiClassDefinition;
517 
518 typedef struct
519 {
520   char *name;
521   jvmtiParamKind kind;
522   jvmtiParamTypes base_type;
523   jboolean null_ok;
524 } jvmtiParamInfo;
525 
526 typedef struct
527 {
528   jint extension_event_index;
529   char *id;
530   char *short_description;
531   jint param_count;
532   jvmtiParamInfo* params;
533 } jvmtiExtensionEventInfo;
534 
535 typedef jvmtiError (JNICALL *jvmtiExtensionFunction)
536   (jvmtiEnv *jvmti_enf, ...);
537 
538 typedef struct
539 {
540   jvmtiExtensionFunction func;
541   char *id;
542   char *short_description;
543   jint param_count;
544   jvmtiParamInfo *params;
545   jint error_count;
546   jvmtiError *errors;
547 } jvmtiExtensionFunctionInfo;
548 
549 typedef struct
550 {
551   jmethodID method;
552   jlocation location;
553 } jvmtiFrameInfo;
554 
555 typedef struct
556 {
557   jlocation start_location;
558   jint line_number;
559 } jvmtiLineNumberEntry;
560 
561 typedef struct
562 {
563   jlocation start_location;
564   jint length;
565   char *name;
566   char *signature;
567   char *generic_signature;
568   jint slot;
569 } jvmtiLocalVariableEntry;
570 
571 typedef struct
572 {
573   jthread owner;
574   jint entry_count;
575   jint waiter_count;
576   jthread *waiters;
577   jint notify_waiter_count;
578   jthread *notify_waiters;
579 } jvmtiMonitorUsage;
580 
581 typedef struct
582 {
583   jthread thread;
584   jint state;
585   jvmtiFrameInfo *frame_buffer;
586   jint frame_count;
587 } jvmtiStackInfo;
588 
589 typedef struct
590 {
591   jthreadGroup parent;
592   char *name;
593   jint max_priority;
594   jboolean is_daemon;
595 } jvmtiThreadGroupInfo;
596 
597 typedef struct
598 {
599   char *name;
600   jint priority;
601   jboolean is_daemon;
602   jthreadGroup thread_group;
603   jobject context_class_loader;
604 } jvmtiThreadInfo;
605 
606 typedef struct
607 {
608   jlong max_value;
609   jboolean may_skip_forward;
610   jboolean may_skip_backward;
611   jvmtiTimerKind kind;
612   jlong reserved1;
613   jlong reserved2;
614 } jvmtiTimerInfo;
615 
616 typedef void (JNICALL *jvmtiExtensionEvent)
617   (jvmtiEnv *jvmti_env, ...);
618 
619 typedef jvmtiIterationControl (JNICALL *jvmtiHeapObjectCallback)
620   (jlong class_tag, jlong size, jlong *tag_ptr, void *user_data);
621 
622 typedef jvmtiIterationControl (JNICALL *jvmtiHeapRootCallback)
623   (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong *tag_ptr,
624    void *user_data);
625 
626 typedef jvmtiIterationControl (JNICALL *jvmtiObjectReferenceCallback)
627   (jvmtiObjectReferenceKind reference_kind, jlong class_tag, jlong size,
628    jlong *tag_ptr, jlong referrer_tag, jint referrer_index, void *user_data);
629 
630 typedef jvmtiIterationControl (JNICALL *jvmtiStackReferenceCallback)
631   (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong *tag_ptr,
632    jlong thread_tag, jint depth, jmethodID method, jint slot, void *user_data);
633 
634 typedef void (JNICALL *jvmtiStartFunction)
635   (jvmtiEnv *env, JNIEnv *jni_env, void *arg);
636 
637 /*
638  * JVM Tool Interface Base Types
639  */
640 typedef struct JNINativeInterface_ jniNativeInterface;
641 
642 struct _Jv_jvmtiEnv
643 {
644   void *reserved1;
645 
646   jvmtiError (JNICALL *SetEventNotificationMode) (jvmtiEnv *env,
647 						  jvmtiEventMode mode,
648 						  jvmtiEvent event_type,
649 						  jthread event_thread, ...);
650   void *reserved3;
651 
652   jvmtiError (JNICALL *GetAllThreads) (jvmtiEnv *env,
653 				       jint *threads_count_ptr,
654 				       jthread **threads_ptr);
655 
656   jvmtiError (JNICALL *SuspendThread) (jvmtiEnv *env,
657 				       jthread thread);
658 
659   jvmtiError (JNICALL *ResumeThread) (jvmtiEnv *env,
660 				      jthread thread);
661 
662   jvmtiError (JNICALL *StopThread) (jvmtiEnv *env,
663 				    jthread thread,
664                                     jobject exception);
665 
666   jvmtiError (JNICALL *InterruptThread) (jvmtiEnv *env,
667 					 jthread thread);
668 
669   jvmtiError (JNICALL *GetThreadInfo) (jvmtiEnv *env,
670 				       jthread thread,
671 				       jvmtiThreadInfo *info_ptr);
672 
673   jvmtiError (JNICALL *GetOwnedMonitorInfo) (jvmtiEnv *env,
674 					     jthread thread,
675 					     jint *owned_monitor_count_ptr,
676 					     jobject **owned_monitors_ptr);
677 
678   jvmtiError (JNICALL *GetCurrentContendedMonitor) (jvmtiEnv *env,
679 						    jthread thread,
680 						    jobject *monitor_ptr);
681 
682   jvmtiError (JNICALL *RunAgentThread) (jvmtiEnv *env,
683 					jthread thread,
684 					jvmtiStartFunction proc,
685 					const void *arg,
686 					jint priority);
687 
688   jvmtiError (JNICALL *GetTopThreadGroups) (jvmtiEnv *env,
689 					    jint *group_count_ptr,
690 					    jthreadGroup **groups_ptr);
691 
692   jvmtiError (JNICALL *GetThreadGroupInfo) (jvmtiEnv *env,
693 					    jthreadGroup group,
694 					    jvmtiThreadGroupInfo *info_ptr);
695 
696   jvmtiError (JNICALL *GetThreadGroupChildren) (jvmtiEnv *env,
697 						jthreadGroup group,
698 						jint *thread_count_ptr,
699 						jthread **threads_ptr,
700 						jint *group_count_ptr,
701 						jthreadGroup **groups_ptr);
702   jvmtiError (JNICALL *GetFrameCount) (jvmtiEnv *env,
703 				       jthread thread,
704 				       jint *count_ptr);
705 
706   jvmtiError (JNICALL *GetThreadState) (jvmtiEnv *env,
707 					jthread thread,
708 					jint *thread_state_ptr);
709 
710   void *reserved18;
711 
712   jvmtiError (JNICALL *GetFrameLocation) (jvmtiEnv *env,
713 					  jthread thread,
714 					  jint depth,
715 					  jmethodID *method_ptr,
716 					  jlocation *location_ptr);
717 
718   jvmtiError (JNICALL *NotifyPopFrame) (jvmtiEnv *env,
719 					jthread thread,
720 					jint depth);
721 
722   jvmtiError (JNICALL *GetLocalObject) (jvmtiEnv *env,
723 					jthread thread,
724 					jint depth,
725 					jint slot,
726 					jobject *value_ptr);
727 
728   jvmtiError (JNICALL *GetLocalInt) (jvmtiEnv *env,
729 				     jthread thread,
730 				     jint depth,
731 				     jint slot,
732 				     jint *value_ptr);
733 
734   jvmtiError (JNICALL *GetLocalLong) (jvmtiEnv *env,
735 				      jthread thread,
736 				      jint depth,
737 				      jint slot,
738 				      jlong *value_ptr);
739 
740   jvmtiError (JNICALL *GetLocalFloat) (jvmtiEnv *env,
741 				       jthread thread,
742 				       jint depth,
743 				       jint slot,
744 				       jfloat *value_ptr);
745 
746   jvmtiError (JNICALL *GetLocalDouble) (jvmtiEnv *env,
747 					jthread thread,
748 					jint depth,
749 					jint slot,
750 					jdouble *value_ptr);
751 
752   jvmtiError (JNICALL *SetLocalObject) (jvmtiEnv *env,
753 					jthread thread,
754 					jint depth,
755 					jint slot,
756 					jobject value);
757 
758   jvmtiError (JNICALL *SetLocalInt) (jvmtiEnv *env,
759 				     jthread thread,
760 				     jint depth,
761 				     jint slot,
762 				     jint value);
763 
764   jvmtiError (JNICALL *SetLocalLong) (jvmtiEnv *env,
765 				      jthread thread,
766 				      jint depth,
767 				      jint slot,
768 				      jlong value);
769 
770   jvmtiError (JNICALL *SetLocalFloat) (jvmtiEnv *env,
771 				       jthread thread,
772 				       jint depth,
773 				       jint slot,
774 				       jfloat value);
775 
776   jvmtiError (JNICALL *SetLocalDouble) (jvmtiEnv *env,
777 					jthread thread,
778 					jint depth,
779 					jint slot,
780 					jdouble value);
781 
782   jvmtiError (JNICALL *CreateRawMonitor) (jvmtiEnv *env,
783 					  const char *name,
784 					  jrawMonitorID *monitor_ptr);
785 
786   jvmtiError (JNICALL *DestroyRawMonitor) (jvmtiEnv *env,
787 					   jrawMonitorID monitor);
788 
789   jvmtiError (JNICALL *RawMonitorEnter) (jvmtiEnv *env,
790 					 jrawMonitorID monitor);
791 
792   jvmtiError (JNICALL *RawMonitorExit) (jvmtiEnv *env,
793 					jrawMonitorID monitor);
794 
795   jvmtiError (JNICALL *RawMonitorWait) (jvmtiEnv *env,
796 					jrawMonitorID monitor,
797                                         jlong millis);
798 
799   jvmtiError (JNICALL *RawMonitorNotify) (jvmtiEnv *env,
800 					  jrawMonitorID monitor);
801 
802   jvmtiError (JNICALL *RawMonitorNotifyAll) (jvmtiEnv *env,
803 					     jrawMonitorID monitor);
804 
805   jvmtiError (JNICALL *SetBreakpoint) (jvmtiEnv *env,
806 				       jmethodID method,
807 				       jlocation location);
808 
809   jvmtiError (JNICALL *ClearBreakpoint) (jvmtiEnv *env,
810 					 jmethodID method,
811 					 jlocation location);
812 
813   void *reserved40;
814 
815   jvmtiError (JNICALL *SetFieldAccessWatch) (jvmtiEnv *env,
816 					     jclass klass,
817 					     jfieldID field);
818 
819   jvmtiError (JNICALL *ClearFieldAccessWatch) (jvmtiEnv *env,
820 					       jclass klass,
821 					       jfieldID field);
822 
823   jvmtiError (JNICALL *SetFieldModificationWatch) (jvmtiEnv *env,
824 						   jclass klass,
825 						   jfieldID field);
826 
827   jvmtiError (JNICALL *ClearFieldModificationWatch) (jvmtiEnv *env,
828 						     jclass klass,
829 						     jfieldID field);
830 
831   void *reserved45;
832 
833   jvmtiError (JNICALL *Allocate) (jvmtiEnv *env,
834 				  jlong size,
835 				  unsigned char **mem_ptr);
836 
837   jvmtiError (JNICALL *Deallocate) (jvmtiEnv *env,
838 				    unsigned char *mem);
839 
840   jvmtiError (JNICALL *GetClassSignature) (jvmtiEnv *env,
841 					   jclass klass,
842 					   char **signature_ptr,
843 					   char **generic_ptr);
844 
845   jvmtiError (JNICALL *GetClassStatus) (jvmtiEnv *env,
846 					jclass klass,
847 					jint *status_ptr);
848 
849   jvmtiError (JNICALL *GetSourceFileName) (jvmtiEnv *env,
850 					   jclass klass,
851 					   char **source_name_ptr);
852 
853   jvmtiError (JNICALL *GetClassModifiers) (jvmtiEnv *env,
854 					   jclass klass,
855 					   jint *modifiers_ptr);
856 
857   jvmtiError (JNICALL *GetClassMethods) (jvmtiEnv *env,
858 					 jclass klass,
859 					 jint *method_count_ptr,
860 					 jmethodID **methods_ptr);
861 
862   jvmtiError (JNICALL *GetClassFields) (jvmtiEnv *env,
863 					jclass klass,
864 					jint *field_count_ptr,
865 					jfieldID **fields_ptr);
866 
867   jvmtiError (JNICALL *GetImplementedInterfaces) (jvmtiEnv *env,
868 						  jclass klass,
869 						  jint *interface_count_ptr,
870 						  jclass **interfaces_ptr);
871 
872   jvmtiError (JNICALL *IsInterface) (jvmtiEnv *env,
873 				     jclass klass,
874 				     jboolean *is_interface_ptr);
875 
876   jvmtiError (JNICALL *IsArrayClass) (jvmtiEnv *env,
877 				      jclass klass,
878 				      jboolean *is_array_class_ptr);
879 
880   jvmtiError (JNICALL *GetClassLoader) (jvmtiEnv *env,
881 					jclass klass,
882 					jobject *classloader_ptr);
883 
884   jvmtiError (JNICALL *GetObjectHashCode) (jvmtiEnv *env,
885 					   jobject object,
886 					   jint *hash_code_ptr);
887 
888   jvmtiError (JNICALL *GetObjectMonitorUsage) (jvmtiEnv *env,
889 					       jobject object,
890 					       jvmtiMonitorUsage *info_ptr);
891 
892   jvmtiError (JNICALL *GetFieldName) (jvmtiEnv *env,
893 				      jclass klass,
894 				      jfieldID field,
895 				      char **name_ptr,
896 				      char **signature_ptr,
897 				      char **generic_ptr);
898 
899   jvmtiError (JNICALL *GetFieldDeclaringClass) (jvmtiEnv *env,
900 						jclass klass,
901 						jfieldID field,
902 						jclass *declaring_class_ptr);
903 
904   jvmtiError (JNICALL *GetFieldModifiers) (jvmtiEnv *env,
905 					   jclass klass,
906 					   jfieldID field,
907 					   jint *modifiers_ptr);
908 
909   jvmtiError (JNICALL *IsFieldSynthetic) (jvmtiEnv *env,
910 					  jclass klass,
911 					  jfieldID field,
912 					  jboolean *is_synthetic_ptr);
913 
914   jvmtiError (JNICALL *GetMethodName) (jvmtiEnv *env,
915 				       jmethodID method,
916 				       char **name_ptr,
917 				       char **signature_ptr,
918 				       char **generic_ptr);
919 
920   jvmtiError (JNICALL *GetMethodDeclaringClass) (jvmtiEnv *env,
921 						 jmethodID method,
922 						 jclass *declaring_class_ptr);
923 
924 
925   jvmtiError (JNICALL *GetMethodModifiers) (jvmtiEnv *env,
926 					    jmethodID method,
927 					    jint *modifiers_ptr);
928 
929   void *reserved67;
930 
931   jvmtiError (JNICALL *GetMaxLocals) (jvmtiEnv *env,
932 				      jmethodID method,
933 				      jint *max_ptr);
934 
935   jvmtiError (JNICALL *GetArgumentsSize) (jvmtiEnv *env,
936 					  jmethodID method,
937 					  jint *size_ptr);
938 
939   jvmtiError (JNICALL *GetLineNumberTable) (jvmtiEnv *env,
940 					    jmethodID method,
941 					    jint *entry_count_ptr,
942 					    jvmtiLineNumberEntry **table_ptr);
943 
944   jvmtiError (JNICALL *GetMethodLocation) (jvmtiEnv *env,
945 					   jmethodID method,
946 					   jlocation *start_location_ptr,
947 					   jlocation *end_location_ptr);
948 
949   jvmtiError (JNICALL *GetLocalVariableTable) (jvmtiEnv *env,
950 					       jmethodID method,
951 					       jint *entry_count_ptr,
952 					       jvmtiLocalVariableEntry **table_ptr);
953 
954   void *reserved73;
955 
956   void *reserved74;
957 
958   jvmtiError (JNICALL *GetBytecodes) (jvmtiEnv *env,
959 				      jmethodID method,
960 				      jint *bytecode_count_ptr,
961 				      unsigned char **bytecodes_ptr);
962 
963   jvmtiError (JNICALL *IsMethodNative) (jvmtiEnv *env,
964 					jmethodID method,
965 					jboolean *is_native_ptr);
966 
967   jvmtiError (JNICALL *IsMethodSynthetic) (jvmtiEnv *env,
968 					   jmethodID method,
969 					   jboolean *is_synthetic_ptr);
970 
971   jvmtiError (JNICALL *GetLoadedClasses) (jvmtiEnv *env,
972 					  jint *class_count_ptr,
973 					  jclass **classes_ptr);
974 
975   jvmtiError (JNICALL *GetClassLoaderClasses) (jvmtiEnv *env,
976 					       jobject initiating_loader,
977 					       jint *class_count_ptr,
978 					       jclass **classes_ptr);
979 
980   jvmtiError (JNICALL *PopFrame) (jvmtiEnv *env,
981 				  jthread thread);
982 
983   void *reserved81;
984 
985   void *reserved82;
986 
987   void *reserved83;
988 
989   void *reserved84;
990 
991   void *reserved85;
992 
993   void *reserved86;
994 
995   jvmtiError (JNICALL *RedefineClasses) (jvmtiEnv *env,
996 					 jint class_count,
997 					 const jvmtiClassDefinition* class_definitions);
998 
999   jvmtiError (JNICALL *GetVersionNumber) (jvmtiEnv *env,
1000 					  jint *version_ptr);
1001 
1002   jvmtiError (JNICALL *GetCapabilities) (jvmtiEnv *env,
1003 					 jvmtiCapabilities *capabilities_ptr);
1004 
1005   jvmtiError (JNICALL *GetSourceDebugExtension) (jvmtiEnv *env,
1006 						 jclass klass,
1007 						 char **source_debug_extension_ptr);
1008 
1009   jvmtiError (JNICALL *IsMethodObsolete) (jvmtiEnv *env,
1010 					  jmethodID method,
1011 					  jboolean *is_obsolete_ptr);
1012 
1013   jvmtiError (JNICALL *SuspendThreadList) (jvmtiEnv *env,
1014 					   jint request_count,
1015 					   const jthread *request_list,
1016 					   jvmtiError *results);
1017 
1018   jvmtiError (JNICALL *ResumeThreadList) (jvmtiEnv *env,
1019 					  jint request_count,
1020 					  const jthread *request_list,
1021 					  jvmtiError *results);
1022 
1023   void *reserved94;
1024 
1025   void *reserved95;
1026 
1027   void *reserved96;
1028 
1029   void *reserved97;
1030 
1031   void *reserved98;
1032 
1033   void *reserved99;
1034 
1035   jvmtiError (JNICALL *GetAllStackTraces) (jvmtiEnv *env,
1036 					   jint max_frame_count,
1037 					   jvmtiStackInfo **stack_info_ptr,
1038 					   jint *thread_count_ptr);
1039 
1040   jvmtiError (JNICALL *GetThreadListStackTraces) (jvmtiEnv *env,
1041 						  jint thread_count,
1042 						  const jthread *thread_list,
1043 						  jint max_frame_count,
1044 						  jvmtiStackInfo **stack_info_ptr);
1045 
1046   jvmtiError (JNICALL *GetThreadLocalStorage) (jvmtiEnv *env,
1047 					       jthread thread,
1048 					       void **data_ptr);
1049 
1050   jvmtiError (JNICALL *SetThreadLocalStorage) (jvmtiEnv *env,
1051 					       jthread thread,
1052 					       const void *data);
1053 
1054   jvmtiError (JNICALL *GetStackTrace) (jvmtiEnv *env,
1055 				       jthread thread,
1056 				       jint start_depth,
1057 				       jint max_frame_count,
1058 				       jvmtiFrameInfo *frame_buffer,
1059 				       jint *count_ptr);
1060 
1061   void *reserved105;
1062 
1063   jvmtiError (JNICALL *GetTag) (jvmtiEnv *env,
1064 				jobject object,
1065 				jlong *tag_ptr);
1066 
1067   jvmtiError (JNICALL *SetTag) (jvmtiEnv *env,
1068 				jobject object,
1069 				jlong tag);
1070 
1071   jvmtiError (JNICALL *ForceGarbageCollection) (jvmtiEnv *env);
1072 
1073   jvmtiError (JNICALL *IterateOverObjectsReachableFromObject) (jvmtiEnv *env,
1074 							       jobject object,
1075 							       jvmtiObjectReferenceCallback object_reference_callback,
1076 							       void *user_data);
1077 
1078   jvmtiError (JNICALL *IterateOverReachableObjects) (jvmtiEnv *env,
1079 						     jvmtiHeapRootCallback heap_root_callback,
1080 						     jvmtiStackReferenceCallback stack_ref_callback,
1081 						     jvmtiObjectReferenceCallback object_ref_callback,
1082 						     void *user_data);
1083 
1084   jvmtiError (JNICALL *IterateOverHeap) (jvmtiEnv *env,
1085 					 jvmtiHeapObjectFilter object_filter,
1086 					 jvmtiHeapObjectCallback heap_object_callback,
1087 					 void *user_data);
1088 
1089   jvmtiError (JNICALL *IterateOverInstanceOfClass) (jvmtiEnv *env,
1090 						    jclass klass,
1091 						    jvmtiHeapObjectFilter object_filter,
1092 						    jvmtiHeapObjectCallback heap_object_callback,
1093 						    void *user_data);
1094 
1095   void *reserved113;
1096 
1097   jvmtiError (JNICALL *GetObjectsWithTags) (jvmtiEnv *env,
1098 					    jint tag_count,
1099 					    const jlong *tags,
1100 					    jint *count_ptr,
1101 					    jobject **object_result_ptr,
1102 					    jlong **tag_result_ptr);
1103 
1104   void *reserved115;
1105 
1106   void *reserved116;
1107 
1108   void *reserved117;
1109 
1110   void *reserved118;
1111 
1112   void *reserved119;
1113 
1114   jvmtiError (JNICALL *SetJNIFunctionTable) (jvmtiEnv *env,
1115 					     const jniNativeInterface *function_table);
1116 
1117   jvmtiError (JNICALL *GetJNIFunctionTable) (jvmtiEnv *env,
1118 					     jniNativeInterface **function_table_ptr);
1119 
1120   jvmtiError (JNICALL *SetEventCallbacks) (jvmtiEnv *env,
1121 					   const jvmtiEventCallbacks *callbacks,
1122 					   jint size_of_callbacks);
1123 
1124   jvmtiError (JNICALL *GenerateEvents) (jvmtiEnv *env,
1125 					jvmtiEvent event_type);
1126 
1127   jvmtiError (JNICALL *GetExtensionFunctions) (jvmtiEnv *env,
1128 					       jint *extension_count_ptr,
1129 					       jvmtiExtensionFunctionInfo **extensions);
1130 
1131   jvmtiError (JNICALL *GetExtensionEvents) (jvmtiEnv *env,
1132 					    jint *extension_count_ptr,
1133 					    jvmtiExtensionEventInfo **extensions);
1134 
1135   jvmtiError (JNICALL *SetExtensionEventCallback) (jvmtiEnv *env,
1136 						   jint extension_event_index,
1137 						   jvmtiExtensionEvent callback);
1138 
1139   jvmtiError (JNICALL *DisposeEnvironment) (jvmtiEnv *env);
1140 
1141   jvmtiError (JNICALL *GetErrorName) (jvmtiEnv *env,
1142 				      jvmtiError error,
1143 				      char **name_ptr);
1144 
1145   jvmtiError (JNICALL *GetJLocationFormat) (jvmtiEnv *env,
1146 					    jvmtiJlocationFormat *format_ptr);
1147 
1148   jvmtiError (JNICALL *GetSystemProperties) (jvmtiEnv *env,
1149 					     jint *count_ptr,
1150 					     char ***property_ptr);
1151 
1152   jvmtiError (JNICALL *GetSystemProperty) (jvmtiEnv *env,
1153 					   const char *property,
1154 					   char **value_ptr);
1155 
1156   jvmtiError (JNICALL *SetSystemProperty) (jvmtiEnv *env,
1157 					   const char *property,
1158 					   const char *value);
1159 
1160   jvmtiError (JNICALL *GetPhase) (jvmtiEnv *env,
1161 				  jvmtiPhase *phase_ptr);
1162 
1163   jvmtiError (JNICALL *GetCurrentThreadCpuTimerInfo) (jvmtiEnv *env,
1164 						      jvmtiTimerInfo *info_ptr);
1165 
1166   jvmtiError (JNICALL *GetCurrentThreadCpuTime) (jvmtiEnv *env,
1167 						 jlong *nanos_ptr);
1168 
1169   jvmtiError (JNICALL *GetThreadCpuTimerInfo) (jvmtiEnv *env,
1170 					       jvmtiTimerInfo *info_ptr);
1171 
1172   jvmtiError (JNICALL *GetThreadCpuTime) (jvmtiEnv *env,
1173 					  jthread thread,
1174 					  jlong *nanos_ptr);
1175 
1176   jvmtiError (JNICALL *GetTimerInfo) (jvmtiEnv *env,
1177 				      jvmtiTimerInfo *info_ptr);
1178 
1179   jvmtiError (JNICALL *GetTime) (jvmtiEnv *env,
1180 				 jlong *nanos_ptr);
1181 
1182   jvmtiError (JNICALL *GetPotentialCapabilities) (jvmtiEnv *env,
1183 						  jvmtiCapabilities *capabilities_ptr);
1184 
1185   void *reserved141;
1186 
1187   jvmtiError (JNICALL *AddCapabilities) (jvmtiEnv *env,
1188 					 const jvmtiCapabilities *capabilities_ptr);
1189 
1190   jvmtiError (JNICALL *RelinquishCapabilities) (jvmtiEnv *env,
1191 						const jvmtiCapabilities *capabilities_ptr);
1192 
1193   jvmtiError (JNICALL *GetAvailableProcessors) (jvmtiEnv *env,
1194 						jint *processor_count_ptr);
1195 
1196   void *reserved145;
1197 
1198   void *reserved146;
1199 
1200   jvmtiError (JNICALL *GetEnvironmentLocalStorage) (jvmtiEnv *env,
1201 						    void **data_ptr);
1202 
1203   jvmtiError (JNICALL *SetEnvironmentLocalStorage) (jvmtiEnv *env,
1204 						    const void *data);
1205 
1206   jvmtiError (JNICALL *AddToBootstrapClassLoaderSearch) (jvmtiEnv *env,
1207 							 const char *segment);
1208 
1209   jvmtiError (JNICALL *SetVerboseFlag) (jvmtiEnv *env,
1210 					jvmtiVerboseFlag flag,
1211 					jboolean value);
1212 
1213   void *reserved151;
1214 
1215   void *reserved152;
1216 
1217   void *reserved153;
1218 
1219   jvmtiError (JNICALL *GetObjectSize) (jvmtiEnv *env,
1220 				       jobject object,
1221 				       jlong *size_ptr);
1222 };
1223 
1224 #ifdef __cplusplus
1225 class _Jv_JVMTIEnv
1226 {
1227  public:
1228   /* Method table */
1229   struct _Jv_jvmtiEnv *p;
1230 
1231 #ifdef _CLASSPATH_JVMTIENV_CONTENTS
1232   _CLASSPATH_JVMTIENV_CONTENTS
1233 #endif
1234 
SetEventNotificationMode(jvmtiEventMode mode,jvmtiEvent event_type,jthread event_thread,...)1235   jvmtiError SetEventNotificationMode (jvmtiEventMode mode,
1236 				       jvmtiEvent event_type,
1237 				       jthread event_thread, ...)
1238   {
1239     va_list args;
1240     va_start (args, event_thread);
1241     jvmtiError result = p->SetEventNotificationMode (this, mode, event_type,
1242 						     event_thread, args);
1243     va_end (args);
1244     return result;
1245   }
1246 
GetAllThreads(jint * threads_count_ptr,jthread ** threads_ptr)1247   jvmtiError GetAllThreads (jint *threads_count_ptr, jthread **threads_ptr)
1248   { return p->GetAllThreads (this, threads_count_ptr, threads_ptr); }
1249 
SuspendThread(jthread thread)1250   jvmtiError SuspendThread (jthread thread)
1251   { return p->SuspendThread (this, thread); }
1252 
ResumeThread(jthread thread)1253   jvmtiError ResumeThread (jthread thread)
1254   { return p->ResumeThread (this, thread); }
1255 
StopThread(jthread thread,jobject exception)1256   jvmtiError StopThread (jthread thread, jobject exception)
1257   { return p->StopThread (this, thread, exception); }
1258 
InterruptThread(jthread thread)1259   jvmtiError InterruptThread (jthread thread)
1260   { return p->InterruptThread (this, thread); }
1261 
GetThreadInfo(jthread thread,jvmtiThreadInfo * info_ptr)1262   jvmtiError GetThreadInfo (jthread thread, jvmtiThreadInfo *info_ptr)
1263   { return p->GetThreadInfo (this, thread, info_ptr); }
1264 
GetOwnedMonitorInfo(jthread thread,jint * owned_monitor_count_ptr,jobject ** owned_monitors_ptr)1265   jvmtiError GetOwnedMonitorInfo (jthread thread,
1266 				  jint *owned_monitor_count_ptr,
1267 				  jobject **owned_monitors_ptr)
1268   {
1269     return p->GetOwnedMonitorInfo (this, thread, owned_monitor_count_ptr,
1270 				   owned_monitors_ptr);
1271   }
1272 
GetCurrentContendedMonitor(jthread thread,jobject * monitor_ptr)1273   jvmtiError GetCurrentContendedMonitor (jthread thread, jobject *monitor_ptr)
1274   { return p->GetCurrentContendedMonitor (this, thread, monitor_ptr); }
1275 
RunAgentThread(jthread thread,jvmtiStartFunction proc,const void * arg,jint priority)1276   jvmtiError RunAgentThread (jthread thread, jvmtiStartFunction proc,
1277 			     const void *arg, jint priority)
1278   { return p->RunAgentThread (this, thread, proc, arg, priority); }
1279 
GetTopThreadGroups(jint * group_count_ptr,jthreadGroup ** groups_ptr)1280   jvmtiError GetTopThreadGroups (jint *group_count_ptr,
1281 				 jthreadGroup **groups_ptr)
1282   { return p->GetTopThreadGroups (this, group_count_ptr, groups_ptr); }
1283 
GetThreadGroupInfo(jthreadGroup group,jvmtiThreadGroupInfo * info_ptr)1284   jvmtiError GetThreadGroupInfo (jthreadGroup group,
1285 				 jvmtiThreadGroupInfo *info_ptr)
1286   { return p->GetThreadGroupInfo (this, group, info_ptr); }
1287 
GetThreadGroupChildren(jthreadGroup group,jint * thread_count_ptr,jthread ** threads_ptr,jint * group_count_ptr,jthreadGroup ** groups_ptr)1288   jvmtiError GetThreadGroupChildren (jthreadGroup group,
1289 				     jint *thread_count_ptr,
1290 				     jthread **threads_ptr,
1291 				     jint *group_count_ptr,
1292 				     jthreadGroup **groups_ptr)
1293   {
1294     return p->GetThreadGroupChildren (this, group, thread_count_ptr,
1295 				      threads_ptr, group_count_ptr,
1296 				      groups_ptr);
1297   }
1298 
GetFrameCount(jthread thread,jint * count_ptr)1299   jvmtiError GetFrameCount (jthread thread, jint *count_ptr)
1300   { return p->GetFrameCount (this, thread, count_ptr); }
1301 
GetThreadState(jthread thread,jint * thread_state_ptr)1302   jvmtiError GetThreadState (jthread thread, jint *thread_state_ptr)
1303   { return p->GetThreadState (this, thread, thread_state_ptr); }
1304 
GetFrameLocation(jthread thread,jint depth,jmethodID * method_ptr,jlocation * location_ptr)1305   jvmtiError GetFrameLocation (jthread thread, jint depth,
1306 			       jmethodID *method_ptr, jlocation *location_ptr)
1307   {
1308     return p->GetFrameLocation (this, thread, depth, method_ptr,
1309 				location_ptr);
1310   }
1311 
NotifyPopFrame(jthread thread,jint depth)1312   jvmtiError NotifyPopFrame (jthread thread, jint depth)
1313   { return p->NotifyPopFrame (this, thread, depth); }
1314 
GetLocalObject(jthread thread,jint depth,jint slot,jobject * value_ptr)1315   jvmtiError GetLocalObject (jthread thread, jint depth, jint slot,
1316 			     jobject *value_ptr)
1317   { return p->GetLocalObject (this, thread, depth, slot, value_ptr); }
1318 
GetLocalInt(jthread thread,jint depth,jint slot,jint * value_ptr)1319   jvmtiError GetLocalInt (jthread thread, jint depth, jint slot,
1320 			  jint *value_ptr)
1321   { return p->GetLocalInt (this, thread, depth, slot, value_ptr); }
1322 
GetLocalLong(jthread thread,jint depth,jint slot,jlong * value_ptr)1323   jvmtiError GetLocalLong (jthread thread, jint depth, jint slot,
1324 			   jlong *value_ptr)
1325   { return p->GetLocalLong (this, thread, depth, slot, value_ptr); }
1326 
GetLocalFloat(jthread thread,jint depth,jint slot,jfloat * value_ptr)1327   jvmtiError GetLocalFloat (jthread thread, jint depth, jint slot,
1328 			    jfloat *value_ptr)
1329   { return p->GetLocalFloat (this, thread, depth, slot, value_ptr); }
1330 
GetLocalDouble(jthread thread,jint depth,jint slot,jdouble * value_ptr)1331   jvmtiError GetLocalDouble (jthread thread, jint depth, jint slot,
1332 			     jdouble *value_ptr)
1333   { return p->GetLocalDouble (this, thread, depth, slot, value_ptr); }
1334 
SetLocalObject(jthread thread,jint depth,jint slot,jobject value)1335   jvmtiError SetLocalObject (jthread thread, jint depth, jint slot,
1336 			     jobject value)
1337   { return p->SetLocalObject (this, thread, depth, slot, value); }
1338 
SetLocalInt(jthread thread,jint depth,jint slot,jint value)1339   jvmtiError SetLocalInt (jthread thread, jint depth, jint slot,
1340 			  jint value)
1341   { return p->SetLocalInt (this, thread, depth, slot, value); }
1342 
SetLocalLong(jthread thread,jint depth,jint slot,jlong value)1343   jvmtiError SetLocalLong (jthread thread, jint depth, jint slot,
1344 			   jlong value)
1345   { return p->SetLocalLong (this, thread, depth, slot, value); }
1346 
SetLocalFloat(jthread thread,jint depth,jint slot,jfloat value)1347   jvmtiError SetLocalFloat (jthread thread, jint depth, jint slot,
1348 			    jfloat value)
1349   { return p->SetLocalFloat (this, thread, depth, slot, value); }
1350 
SetLocalDouble(jthread thread,jint depth,jint slot,jdouble value)1351   jvmtiError SetLocalDouble (jthread thread, jint depth, jint slot,
1352 			     jdouble value)
1353   { return p->SetLocalDouble (this, thread, depth, slot, value); }
1354 
CreateRawMonitor(const char * name,jrawMonitorID * monitor_ptr)1355   jvmtiError CreateRawMonitor (const char *name, jrawMonitorID *monitor_ptr)
1356   { return p->CreateRawMonitor (this, name, monitor_ptr); }
1357 
DestroyRawMonitor(jrawMonitorID monitor)1358   jvmtiError DestroyRawMonitor (jrawMonitorID monitor)
1359   { return p->DestroyRawMonitor (this, monitor); }
1360 
RawMonitorEnter(jrawMonitorID monitor)1361   jvmtiError RawMonitorEnter (jrawMonitorID monitor)
1362   { return p->RawMonitorEnter (this, monitor); }
1363 
RawMonitorExit(jrawMonitorID monitor)1364   jvmtiError RawMonitorExit (jrawMonitorID monitor)
1365   { return p->RawMonitorExit (this, monitor); }
1366 
RawMonitorWait(jrawMonitorID monitor,jlong millis)1367   jvmtiError RawMonitorWait (jrawMonitorID monitor, jlong millis)
1368   { return p->RawMonitorWait (this, monitor, millis); }
1369 
RawMonitorNotify(jrawMonitorID monitor)1370   jvmtiError RawMonitorNotify (jrawMonitorID monitor)
1371   { return p->RawMonitorNotify (this, monitor); }
1372 
RawMonitorNotifyAll(jrawMonitorID monitor)1373   jvmtiError RawMonitorNotifyAll (jrawMonitorID monitor)
1374   { return p->RawMonitorNotifyAll (this, monitor); }
1375 
SetBreakpoint(jmethodID method,jlocation location)1376   jvmtiError SetBreakpoint (jmethodID method, jlocation location)
1377   { return p->SetBreakpoint (this, method, location); }
1378 
ClearBreakpoint(jmethodID method,jlocation location)1379   jvmtiError ClearBreakpoint (jmethodID method, jlocation location)
1380   { return p->ClearBreakpoint (this, method, location); }
1381 
SetFieldAccessWatch(jclass klass,jfieldID field)1382   jvmtiError SetFieldAccessWatch (jclass klass, jfieldID field)
1383   { return p->SetFieldAccessWatch (this, klass, field); }
1384 
ClearFieldAccessWatch(jclass klass,jfieldID field)1385   jvmtiError ClearFieldAccessWatch (jclass klass, jfieldID field)
1386   { return p->ClearFieldAccessWatch (this, klass, field); }
1387 
SetFieldModificationWatch(jclass klass,jfieldID field)1388   jvmtiError SetFieldModificationWatch (jclass klass, jfieldID field)
1389   { return p->SetFieldModificationWatch (this, klass, field); }
1390 
ClearFieldModificationWatch(jclass klass,jfieldID field)1391   jvmtiError ClearFieldModificationWatch (jclass klass, jfieldID field)
1392   { return p->ClearFieldModificationWatch (this, klass, field); }
1393 
Allocate(jlong size,unsigned char ** mem_ptr)1394   jvmtiError Allocate (jlong size, unsigned char **mem_ptr)
1395   { return p->Allocate (this, size, mem_ptr); }
1396 
Deallocate(unsigned char * mem)1397   jvmtiError Deallocate (unsigned char *mem)
1398   { return p->Deallocate (this, mem); }
1399 
GetClassSignature(jclass klass,char ** signature_ptr,char ** generic_ptr)1400   jvmtiError GetClassSignature (jclass klass, char **signature_ptr,
1401 				char **generic_ptr)
1402   { return p->GetClassSignature (this, klass, signature_ptr, generic_ptr); }
1403 
GetClassStatus(jclass klass,jint * status_ptr)1404   jvmtiError GetClassStatus (jclass klass, jint *status_ptr)
1405   { return p->GetClassStatus (this, klass, status_ptr); }
1406 
GetSourceFileName(jclass klass,char ** source_name_ptr)1407   jvmtiError GetSourceFileName (jclass klass, char **source_name_ptr)
1408   { return p->GetSourceFileName (this, klass, source_name_ptr); }
1409 
GetClassModifiers(jclass klass,jint * modifiers_ptr)1410   jvmtiError GetClassModifiers (jclass klass, jint *modifiers_ptr)
1411   { return p->GetClassModifiers (this, klass, modifiers_ptr); }
1412 
GetClassMethods(jclass klass,jint * method_count_ptr,jmethodID ** methods_ptr)1413   jvmtiError GetClassMethods (jclass klass, jint *method_count_ptr,
1414 			      jmethodID **methods_ptr)
1415   { return p->GetClassMethods (this, klass, method_count_ptr, methods_ptr); }
1416 
GetClassFields(jclass klass,jint * field_count_ptr,jfieldID ** fields_ptr)1417   jvmtiError GetClassFields (jclass klass, jint *field_count_ptr,
1418 			     jfieldID **fields_ptr)
1419   { return p->GetClassFields (this, klass, field_count_ptr, fields_ptr); }
1420 
GetImplementedInterfaces(jclass klass,jint * interface_count_ptr,jclass ** interfaces_ptr)1421   jvmtiError GetImplementedInterfaces (jclass klass,
1422 				       jint *interface_count_ptr,
1423 				       jclass **interfaces_ptr)
1424   {
1425     return p->GetImplementedInterfaces (this, klass, interface_count_ptr,
1426 					interfaces_ptr);
1427   }
1428 
IsInterface(jclass klass,jboolean * is_interface_ptr)1429   jvmtiError IsInterface (jclass klass, jboolean *is_interface_ptr)
1430   { return p->IsInterface (this, klass, is_interface_ptr); }
1431 
IsArrayClass(jclass klass,jboolean * is_array_class_ptr)1432   jvmtiError IsArrayClass (jclass klass, jboolean *is_array_class_ptr)
1433   { return p->IsArrayClass (this, klass, is_array_class_ptr); }
1434 
GetClassLoader(jclass klass,jobject * classloader_ptr)1435   jvmtiError GetClassLoader (jclass klass, jobject *classloader_ptr)
1436   { return p->GetClassLoader (this, klass, classloader_ptr); }
1437 
GetObjectHashCode(jobject object,jint * hash_code_ptr)1438   jvmtiError GetObjectHashCode (jobject object, jint *hash_code_ptr)
1439   { return p->GetObjectHashCode (this, object, hash_code_ptr); }
1440 
GetObjectMonitorUsage(jobject object,jvmtiMonitorUsage * info_ptr)1441   jvmtiError GetObjectMonitorUsage (jobject object,
1442 				    jvmtiMonitorUsage *info_ptr)
1443   { return p->GetObjectMonitorUsage (this, object, info_ptr); }
1444 
GetFieldName(jclass klass,jfieldID field,char ** name_ptr,char ** signature_ptr,char ** generic_ptr)1445   jvmtiError GetFieldName (jclass klass, jfieldID field, char **name_ptr,
1446 			   char **signature_ptr, char **generic_ptr)
1447   {
1448     return p->GetFieldName (this, klass, field, name_ptr,
1449 			    signature_ptr, generic_ptr);
1450   }
1451 
GetFieldDeclaringClass(jclass klass,jfieldID field,jclass * declaring_class_ptr)1452   jvmtiError GetFieldDeclaringClass (jclass klass, jfieldID field,
1453 				     jclass *declaring_class_ptr)
1454   {
1455     return p->GetFieldDeclaringClass (this, klass, field,
1456 				      declaring_class_ptr);
1457   }
1458 
GetFieldModifiers(jclass klass,jfieldID field,jint * modifiers_ptr)1459   jvmtiError GetFieldModifiers (jclass klass, jfieldID field,
1460 				jint *modifiers_ptr)
1461   { return p->GetFieldModifiers (this, klass, field, modifiers_ptr); }
1462 
IsFieldSynthetic(jclass klass,jfieldID field,jboolean * is_synthetic_ptr)1463   jvmtiError IsFieldSynthetic (jclass klass, jfieldID field,
1464 			       jboolean *is_synthetic_ptr)
1465   { return p->IsFieldSynthetic (this, klass, field, is_synthetic_ptr); }
1466 
GetMethodName(jmethodID method,char ** name_ptr,char ** signature_ptr,char ** generic_ptr)1467   jvmtiError GetMethodName (jmethodID method, char **name_ptr,
1468 			    char **signature_ptr, char **generic_ptr)
1469   {
1470     return p->GetMethodName (this, method, name_ptr, signature_ptr,
1471 			     generic_ptr);
1472   }
1473 
GetMethodDeclaringClass(jmethodID method,jclass * declaring_class_ptr)1474   jvmtiError GetMethodDeclaringClass (jmethodID method,
1475 				      jclass *declaring_class_ptr)
1476   { return p->GetMethodDeclaringClass (this, method, declaring_class_ptr); }
1477 
1478 
GetMethodModifiers(jmethodID method,jint * modifiers_ptr)1479   jvmtiError GetMethodModifiers (jmethodID method, jint *modifiers_ptr)
1480   { return p->GetMethodModifiers (this, method, modifiers_ptr); }
1481 
GetMaxLocals(jmethodID method,jint * max_ptr)1482   jvmtiError GetMaxLocals (jmethodID method, jint *max_ptr)
1483   { return p->GetMaxLocals (this, method, max_ptr); }
1484 
GetArgumentsSize(jmethodID method,jint * size_ptr)1485   jvmtiError GetArgumentsSize (jmethodID method, jint *size_ptr)
1486   { return p->GetArgumentsSize (this, method, size_ptr); }
1487 
GetLineNumberTable(jmethodID method,jint * entry_count_ptr,jvmtiLineNumberEntry ** table_ptr)1488   jvmtiError GetLineNumberTable (jmethodID method, jint *entry_count_ptr,
1489 				 jvmtiLineNumberEntry **table_ptr)
1490   { return p->GetLineNumberTable (this, method, entry_count_ptr, table_ptr); }
1491 
GetMethodLocation(jmethodID method,jlocation * start_location_ptr,jlocation * end_location_ptr)1492   jvmtiError GetMethodLocation (jmethodID method,
1493 				jlocation *start_location_ptr,
1494 				jlocation *end_location_ptr)
1495   {
1496     return p->GetMethodLocation (this, method, start_location_ptr,
1497 				 end_location_ptr);
1498   }
1499 
GetLocalVariableTable(jmethodID method,jint * entry_count_ptr,jvmtiLocalVariableEntry ** table_ptr)1500   jvmtiError GetLocalVariableTable (jmethodID method, jint *entry_count_ptr,
1501 				    jvmtiLocalVariableEntry **table_ptr)
1502   {
1503     return p->GetLocalVariableTable (this, method, entry_count_ptr,
1504 				     table_ptr);
1505   }
1506 
GetBytecodes(jmethodID method,jint * bytecode_count_ptr,unsigned char ** bytecodes_ptr)1507   jvmtiError GetBytecodes (jmethodID method, jint *bytecode_count_ptr,
1508 			   unsigned char **bytecodes_ptr)
1509   {
1510     return p->GetBytecodes (this, method, bytecode_count_ptr,
1511 			    bytecodes_ptr);
1512   }
1513 
IsMethodNative(jmethodID method,jboolean * is_native_ptr)1514   jvmtiError IsMethodNative (jmethodID method, jboolean *is_native_ptr)
1515   { return p->IsMethodNative (this, method, is_native_ptr); }
1516 
IsMethodSynthetic(jmethodID method,jboolean * is_synthetic_ptr)1517   jvmtiError IsMethodSynthetic (jmethodID method, jboolean *is_synthetic_ptr)
1518   { return p->IsMethodSynthetic (this, method, is_synthetic_ptr); }
1519 
GetLoadedClasses(jint * class_count_ptr,jclass ** classes_ptr)1520   jvmtiError GetLoadedClasses (jint *class_count_ptr, jclass **classes_ptr)
1521   { return p->GetLoadedClasses (this, class_count_ptr, classes_ptr); }
1522 
GetClassLoaderClasses(jobject initiating_loader,jint * class_count_ptr,jclass ** classes_ptr)1523   jvmtiError GetClassLoaderClasses (jobject initiating_loader,
1524 				    jint *class_count_ptr,
1525 				    jclass **classes_ptr)
1526   {
1527     return p->GetClassLoaderClasses (this, initiating_loader,
1528 				     class_count_ptr, classes_ptr);
1529   }
1530 
PopFrame(jthread thread)1531   jvmtiError PopFrame (jthread thread)
1532   { return p->PopFrame (this, thread); }
1533 
RedefineClasses(jint class_count,const jvmtiClassDefinition * class_definitions)1534   jvmtiError RedefineClasses (jint class_count,
1535 			      const jvmtiClassDefinition* class_definitions)
1536   { return p->RedefineClasses (this, class_count, class_definitions); }
1537 
GetVersionNumber(jint * version_ptr)1538   jvmtiError GetVersionNumber (jint *version_ptr)
1539   { return p->GetVersionNumber (this, version_ptr); }
1540 
GetCapabilities(jvmtiCapabilities * capabilities_ptr)1541   jvmtiError GetCapabilities (jvmtiCapabilities *capabilities_ptr)
1542   { return p->GetCapabilities (this, capabilities_ptr); }
1543 
GetSourceDebugExtension(jclass klass,char ** source_debug_extension_ptr)1544   jvmtiError GetSourceDebugExtension (jclass klass,
1545 				      char **source_debug_extension_ptr)
1546   {
1547     return p->GetSourceDebugExtension (this, klass,
1548 				       source_debug_extension_ptr);
1549   }
1550 
IsMethodObsolete(jmethodID method,jboolean * is_obsolete_ptr)1551   jvmtiError IsMethodObsolete (jmethodID method, jboolean *is_obsolete_ptr)
1552   { return p->IsMethodObsolete (this, method, is_obsolete_ptr); }
1553 
1554 
SuspendThreadList(jint request_count,const jthread * request_list,jvmtiError * results)1555   jvmtiError SuspendThreadList (jint request_count,
1556 				const jthread *request_list,
1557 				jvmtiError *results)
1558   { return p->SuspendThreadList (this, request_count, request_list, results); }
1559 
ResumeThreadList(jint request_count,const jthread * request_list,jvmtiError * results)1560   jvmtiError ResumeThreadList (jint request_count,
1561 			       const jthread *request_list,
1562 			       jvmtiError *results)
1563   { return p->ResumeThreadList (this, request_count, request_list, results); }
1564 
GetAllStackTraces(jint max_frame_count,jvmtiStackInfo ** stack_info_ptr,jint * thread_count_ptr)1565   jvmtiError GetAllStackTraces (jint max_frame_count,
1566 				jvmtiStackInfo **stack_info_ptr,
1567 				jint *thread_count_ptr)
1568   {
1569     return p->GetAllStackTraces (this, max_frame_count, stack_info_ptr,
1570 				 thread_count_ptr);
1571   }
1572 
GetThreadListStackTraces(jint thread_count,const jthread * thread_list,jint max_frame_count,jvmtiStackInfo ** stack_info_ptr)1573   jvmtiError GetThreadListStackTraces (jint thread_count,
1574 				       const jthread *thread_list,
1575 				       jint max_frame_count,
1576 				       jvmtiStackInfo **stack_info_ptr)
1577   {
1578     return p->GetThreadListStackTraces (this, thread_count, thread_list,
1579 					max_frame_count, stack_info_ptr);
1580   }
1581 
GetThreadLocalStorage(jthread thread,void ** data_ptr)1582   jvmtiError GetThreadLocalStorage (jthread thread, void **data_ptr)
1583   { return p->GetThreadLocalStorage (this, thread, data_ptr); }
1584 
SetThreadLocalStorage(jthread thread,const void * data)1585   jvmtiError SetThreadLocalStorage (jthread thread, const void *data)
1586   { return p->SetThreadLocalStorage (this, thread, data); }
1587 
GetStackTrace(jthread thread,jint start_depth,jint max_frame_count,jvmtiFrameInfo * frame_buffer,jint * count_ptr)1588   jvmtiError GetStackTrace (jthread thread, jint start_depth,
1589 			    jint max_frame_count,
1590 			    jvmtiFrameInfo *frame_buffer, jint *count_ptr)
1591   {
1592     return p->GetStackTrace (this, thread, start_depth, max_frame_count,
1593 			     frame_buffer, count_ptr);
1594   }
1595 
GetTag(jobject object,jlong * tag_ptr)1596   jvmtiError GetTag (jobject object, jlong *tag_ptr)
1597   { return p->GetTag (this, object, tag_ptr); }
1598 
SetTag(jobject object,jlong tag)1599   jvmtiError SetTag (jobject object, jlong tag)
1600   { return p->SetTag (this, object, tag); }
1601 
ForceGarbageCollection(void)1602   jvmtiError ForceGarbageCollection (void)
1603   { return p->ForceGarbageCollection (this); }
1604 
IterateOverObjectsReachableFromObject(jobject object,jvmtiObjectReferenceCallback object_reference_callback,void * user_data)1605   jvmtiError IterateOverObjectsReachableFromObject (jobject object,
1606 						    jvmtiObjectReferenceCallback object_reference_callback,
1607 						    void *user_data)
1608   {
1609     return p->IterateOverObjectsReachableFromObject (this, object,
1610 						     object_reference_callback,
1611 						     user_data);
1612   }
1613 
IterateOverReachableObjects(jvmtiHeapRootCallback heap_root_callback,jvmtiStackReferenceCallback stack_ref_callback,jvmtiObjectReferenceCallback object_ref_callback,void * user_data)1614   jvmtiError IterateOverReachableObjects (jvmtiHeapRootCallback heap_root_callback,
1615 					  jvmtiStackReferenceCallback stack_ref_callback,
1616 					  jvmtiObjectReferenceCallback object_ref_callback,
1617 					  void *user_data)
1618   {
1619     return p->IterateOverReachableObjects (this, heap_root_callback,
1620 					   stack_ref_callback,
1621 					   object_ref_callback,
1622 					   user_data);
1623   }
1624 
IterateOverHeap(jvmtiHeapObjectFilter object_filter,jvmtiHeapObjectCallback heap_object_callback,void * user_data)1625   jvmtiError IterateOverHeap (jvmtiHeapObjectFilter object_filter,
1626 			      jvmtiHeapObjectCallback heap_object_callback,
1627 			      void *user_data)
1628   {
1629     return p->IterateOverHeap (this, object_filter, heap_object_callback,
1630 			       user_data);
1631   }
1632 
IterateOverInstanceOfClass(jclass klass,jvmtiHeapObjectFilter object_filter,jvmtiHeapObjectCallback heap_object_callback,void * user_data)1633   jvmtiError IterateOverInstanceOfClass (jclass klass,
1634 					 jvmtiHeapObjectFilter object_filter,
1635 					 jvmtiHeapObjectCallback heap_object_callback,
1636 					 void *user_data)
1637   {
1638     return p->IterateOverInstanceOfClass (this, klass, object_filter,
1639 					  heap_object_callback, user_data);
1640   }
1641 
GetObjectsWithTags(jint tag_count,const jlong * tags,jint * count_ptr,jobject ** object_result_ptr,jlong ** tag_result_ptr)1642   jvmtiError GetObjectsWithTags (jint tag_count, const jlong *tags,
1643 				 jint *count_ptr, jobject **object_result_ptr,
1644 				 jlong **tag_result_ptr)
1645   {
1646     return p->GetObjectsWithTags (this, tag_count, tags, count_ptr,
1647 				  object_result_ptr, tag_result_ptr);
1648   }
1649 
SetJNIFunctionTable(const jniNativeInterface * function_table)1650   jvmtiError SetJNIFunctionTable (const jniNativeInterface *function_table)
1651   { return p->SetJNIFunctionTable (this, function_table); }
1652 
GetJNIFunctionTable(jniNativeInterface ** function_table_ptr)1653   jvmtiError GetJNIFunctionTable (jniNativeInterface **function_table_ptr)
1654   { return p->GetJNIFunctionTable (this, function_table_ptr); }
1655 
SetEventCallbacks(const jvmtiEventCallbacks * callbacks,jint size_of_callbacks)1656   jvmtiError SetEventCallbacks (const jvmtiEventCallbacks *callbacks,
1657 				jint size_of_callbacks)
1658   { return p->SetEventCallbacks (this, callbacks, size_of_callbacks); }
1659 
GenerateEvents(jvmtiEvent event_type)1660   jvmtiError GenerateEvents (jvmtiEvent event_type)
1661   { return p->GenerateEvents (this, event_type); }
1662 
GetExtensionFunctions(jint * extension_count_ptr,jvmtiExtensionFunctionInfo ** extensions)1663   jvmtiError GetExtensionFunctions (jint *extension_count_ptr,
1664 				    jvmtiExtensionFunctionInfo **extensions)
1665   { return p->GetExtensionFunctions (this, extension_count_ptr, extensions); }
1666 
GetExtensionEvents(jint * extension_count_ptr,jvmtiExtensionEventInfo ** extensions)1667   jvmtiError GetExtensionEvents (jint *extension_count_ptr,
1668 				 jvmtiExtensionEventInfo **extensions)
1669   { return p->GetExtensionEvents (this, extension_count_ptr, extensions); }
1670 
SetExtensionEventCallback(jint extension_event_index,jvmtiExtensionEvent callback)1671   jvmtiError SetExtensionEventCallback (jint extension_event_index,
1672 					jvmtiExtensionEvent callback)
1673   {
1674     return p->SetExtensionEventCallback (this, extension_event_index,
1675 					 callback);
1676   }
1677 
DisposeEnvironment(void)1678   jvmtiError DisposeEnvironment (void)
1679   { return p->DisposeEnvironment (this); }
1680 
GetErrorName(jvmtiError error,char ** name_ptr)1681   jvmtiError GetErrorName (jvmtiError error, char **name_ptr)
1682   { return p->GetErrorName (this, error, name_ptr); }
1683 
GetJLocationFormat(jvmtiJlocationFormat * format_ptr)1684   jvmtiError GetJLocationFormat (jvmtiJlocationFormat *format_ptr)
1685   { return p->GetJLocationFormat (this, format_ptr); }
1686 
GetSystemProperties(jint * count_ptr,char *** property_ptr)1687   jvmtiError GetSystemProperties (jint *count_ptr, char ***property_ptr)
1688   { return p->GetSystemProperties (this, count_ptr, property_ptr); }
1689 
GetSystemProperty(const char * property,char ** value_ptr)1690   jvmtiError GetSystemProperty (const char *property, char **value_ptr)
1691   { return p->GetSystemProperty (this, property, value_ptr); }
1692 
SetSystemProperty(const char * property,const char * value)1693   jvmtiError SetSystemProperty (const char *property, const char *value)
1694   { return p->SetSystemProperty (this, property, value); }
1695 
GetPhase(jvmtiPhase * phase_ptr)1696   jvmtiError GetPhase (jvmtiPhase *phase_ptr)
1697   { return p->GetPhase (this, phase_ptr); }
1698 
GetCurrentThreadCpuTimerInfo(jvmtiTimerInfo * info_ptr)1699   jvmtiError GetCurrentThreadCpuTimerInfo (jvmtiTimerInfo *info_ptr)
1700   { return p->GetCurrentThreadCpuTimerInfo (this, info_ptr); }
1701 
GetCurrentThreadCpuTime(jlong * nanos_ptr)1702   jvmtiError GetCurrentThreadCpuTime (jlong *nanos_ptr)
1703   { return p->GetCurrentThreadCpuTime (this, nanos_ptr); }
1704 
GetThreadCpuTimerInfo(jvmtiTimerInfo * info_ptr)1705   jvmtiError GetThreadCpuTimerInfo (jvmtiTimerInfo *info_ptr)
1706   { return p->GetThreadCpuTimerInfo (this, info_ptr); }
1707 
GetThreadCpuTime(jthread thread,jlong * nanos_ptr)1708   jvmtiError GetThreadCpuTime (jthread thread, jlong *nanos_ptr)
1709   { return p->GetThreadCpuTime (this, thread, nanos_ptr); }
1710 
GetTimerInfo(jvmtiTimerInfo * info_ptr)1711   jvmtiError GetTimerInfo (jvmtiTimerInfo *info_ptr)
1712   { return p->GetTimerInfo (this, info_ptr); }
1713 
GetTime(jlong * nanos_ptr)1714   jvmtiError GetTime (jlong *nanos_ptr)
1715   {return p->GetTime (this, nanos_ptr); }
1716 
GetPotentialCapabilities(jvmtiCapabilities * capabilities_ptr)1717   jvmtiError GetPotentialCapabilities (jvmtiCapabilities *capabilities_ptr)
1718   { return p->GetPotentialCapabilities (this, capabilities_ptr); }
1719 
AddCapabilities(const jvmtiCapabilities * capabilities_ptr)1720   jvmtiError AddCapabilities (const jvmtiCapabilities *capabilities_ptr)
1721   { return p->AddCapabilities (this, capabilities_ptr); }
1722 
RelinquishCapabilities(const jvmtiCapabilities * capabilities_ptr)1723   jvmtiError RelinquishCapabilities (const jvmtiCapabilities *capabilities_ptr)
1724   { return p->RelinquishCapabilities (this, capabilities_ptr); }
1725 
GetAvailableProcessors(jint * processor_count_ptr)1726   jvmtiError GetAvailableProcessors (jint *processor_count_ptr)
1727   { return p->GetAvailableProcessors (this, processor_count_ptr); }
1728 
GetEnvironmentLocalStorage(void ** data_ptr)1729   jvmtiError GetEnvironmentLocalStorage (void **data_ptr)
1730   { return p->GetEnvironmentLocalStorage (this, data_ptr); }
1731 
SetEnvironmentLocalStorage(const void * data)1732   jvmtiError SetEnvironmentLocalStorage (const void *data)
1733   { return p->SetEnvironmentLocalStorage (this, data); }
1734 
AddToBootstrapClassLoaderSearch(const char * segment)1735   jvmtiError AddToBootstrapClassLoaderSearch (const char *segment)
1736   { return p->AddToBootstrapClassLoaderSearch (this, segment); }
1737 
SetVerboseFlag(jvmtiVerboseFlag flag,jboolean value)1738   jvmtiError SetVerboseFlag (jvmtiVerboseFlag flag, jboolean value)
1739   { return p->SetVerboseFlag (this, flag, value); }
1740 
GetObjectSize(jobject object,jlong * size_ptr)1741   jvmtiError GetObjectSize (jobject object, jlong *size_ptr)
1742   { return p->GetObjectSize (this, object, size_ptr); }
1743 };
1744 #endif /* __cplusplus */
1745 
1746 /*
1747  * Miscellaneous flags, constants, etc
1748  */
1749 
1750 /* Class status flags */
1751 #define JVMTI_CLASS_STATUS_VERIFIED 1
1752 #define JVMTI_CLASS_STATUS_PREPARED 2
1753 #define JVMTI_CLASS_STATUS_INITIALIZED 4
1754 #define JVMTI_CLASS_STATUS_ERROR 8
1755 #define JVMTI_CLASS_STATUS_ARRAY 16
1756 #define JVMTI_CLASS_STATUS_PRIMITIVE 32
1757 
1758 /* Thread state flags */
1759 #define JVMTI_THREAD_STATE_ALIVE 0x0001
1760 #define JVMTI_THREAD_STATE_TERMINATED 0x0002
1761 #define JVMTI_THREAD_STATE_RUNNABLE 0x0004
1762 #define JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER 0x0400
1763 #define JVMTI_THREAD_STATE_WAITING 0x0080
1764 #define JVMTI_THREAD_STATE_WAITING_INDEFINITELY 0x0010
1765 #define JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT 0x0020
1766 #define JVMTI_THREAD_STATE_SLEEPING 0x0040
1767 #define JVMTI_THREAD_STATE_IN_OBJECT_WAIT 0x0100
1768 #define JVMTI_THREAD_STATE_PARKED 0x0200
1769 #define JVMTI_THREAD_STATE_SUSPENDED 0x100000
1770 #define JVMTI_THREAD_STATE_INTERRUPTED 0x200000
1771 #define JVMTI_THREAD_STATE_IN_NATIVE 0x400000
1772 #define JVMTI_THREAD_STATE_VENDOR_1 0x10000000
1773 #define JVMTI_THREAD_STATE_VENDOR_2 0x20000000
1774 #define JVMTI_THREAD_STATE_VENDOR_3 0x40000000
1775 
1776 /* java.lang.Thread.State conversion masks */
1777 #define JVMTI_JAVA_LANG_THREAD_STATE_MASK		\
1778   (JVMTI_THREAD_STATE_TERMINATED			\
1779    | JVMTI_THREAD_STATE_ALIVE				\
1780    | JVMTI_THREAD_STATE_RUNNABLE			\
1781    | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER	\
1782    | JVMTI_THREAD_STATE_WAITING				\
1783    | JVMTI_THREAD_STATE_WAITING_INDEFINITELY		\
1784    | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT)
1785 #define JVMTI_JAVA_LANG_THREAD_STATE_NEW 0
1786 #define JVMTI_JAVA_LANG_THREAD_STATE_TERMINATED JVMTI_THREAD_STATE_TERMINATED
1787 #define JVMTI_JAVA_LANG_THREAD_STATE_RUNNABLE \
1788   (JVMTI_THREAD_STATE_ALIVE		      \
1789    | JVMTI_THREAD_STATE_RUNNABLE)
1790 #define JVMTI_JAVA_LANG_THREAD_STATE_BLOCKED	\
1791   (JVMTI_THREAD_STATE_ALIVE			\
1792    | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER)
1793 #define JVMTI_JAVA_LANG_THREAD_STATE_WAITING	\
1794   (JVMTI_THREAD_STATE_ALIVE			\
1795    | JVMTI_THREAD_STATE_WAITING			\
1796    | JVMTI_THREAD_STATE_WAITING_INDEFINITELY)
1797 #define JVMTI_JAVA_LANG_THREAD_STATE_TIMED_WAITING \
1798   (JVMTI_THREAD_STATE_ALIVE			   \
1799    | JVMTI_THREAD_STATE_WAITING			   \
1800    | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT)
1801 
1802 /* Thread priorities */
1803 #define JVMTI_THREAD_MIN_PRIORITY 1
1804 #define JVMTI_THREAD_NORM_PRIORITY 5
1805 #define JVMTI_THREAD_MAX_PRIORITY 10
1806 
1807 /* Keep c-font-lock-extra-types in order: JNI followed by JVMTI,
1808    all in alphabetical order */
1809 /* Local Variables: */
1810 /* c-font-lock-extra-types: ("\\sw+_t"
1811    "JNIEnv" "JNINativeMethod" "JavaVM" "JavaVMOption" "jarray"
1812    "jboolean" "jbooleanArray" "jbyte" "jbyteArray" "jchar"  "jcharArray"
1813    "jclass" "jdouble" "jdoubleArray" "jfieldID" "jfloat" "jfloatArray"
1814    "jint" "jintArray" "jlong" "jlongArray" "jmethodID" "jobject" "jstring" "jthrowable"
1815    "jvalue" "jweak"
1816    "jvmtiEnv" "jvmtiError"
1817    "jthread" "jthreadGroup" "jlocation" "jrawMonitorID") */
1818 /* End: */
1819 #endif /* !_CLASSPATH_JVMTI_H */
1820