jvmti_sys/
lib.rs

1// Modified from https://github.com/sfackler/rust-jni-sys to clean up naming, use jni-sys, and get rid of libc
2// rust wrapper for jvmti.h
3// copy from https://github.com/cretz/stackparam/blob/master/src/jvmti_sys/mod.rs
4#![allow(non_snake_case, non_camel_case_types, dead_code)]
5
6extern crate jni_sys;
7
8use std::os::raw::{c_char, c_uchar, c_int, c_uint, c_void};
9use jni_sys::{jobject, jlong, jint, jvalue, jchar, jboolean, jfloat, jdouble, jclass, jmethodID,
10              jfieldID, JNIEnv, JNINativeInterface_};
11use std::mem;
12
13pub const JVMTI_VERSION_1: c_uint = 805371904;
14pub const JVMTI_VERSION_1_0: c_uint = 805371904;
15pub const JVMTI_VERSION_1_1: c_uint = 805372160;
16pub const JVMTI_VERSION_1_2: c_uint = 805372416;
17pub const JVMTI_VERSION: c_int = 805372417;
18
19pub type jvmtiEnv = *const jvmtiInterface_1;
20pub type jthread = jobject;
21pub type jthreadGroup = jobject;
22pub type jlocation = jlong;
23pub enum _jrawMonitorID { }
24pub type jrawMonitorID = *mut _jrawMonitorID;
25
26pub const JVMTI_THREAD_STATE_ALIVE: c_uint = 1;
27pub const JVMTI_THREAD_STATE_TERMINATED: c_uint = 2;
28pub const JVMTI_THREAD_STATE_RUNNABLE: c_uint = 4;
29pub const JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER: c_uint = 1024;
30pub const JVMTI_THREAD_STATE_WAITING: c_uint = 128;
31pub const JVMTI_THREAD_STATE_WAITING_INDEFINITELY: c_uint = 16;
32pub const JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT: c_uint = 32;
33pub const JVMTI_THREAD_STATE_SLEEPING: c_uint = 64;
34pub const JVMTI_THREAD_STATE_IN_OBJECT_WAIT: c_uint = 256;
35pub const JVMTI_THREAD_STATE_PARKED: c_uint = 512;
36pub const JVMTI_THREAD_STATE_SUSPENDED: c_uint = 1048576;
37pub const JVMTI_THREAD_STATE_INTERRUPTED: c_uint = 2097152;
38pub const JVMTI_THREAD_STATE_IN_NATIVE: c_uint = 4194304;
39pub const JVMTI_THREAD_STATE_VENDOR_1: c_uint = 268435456;
40pub const JVMTI_THREAD_STATE_VENDOR_2: c_uint = 536870912;
41pub const JVMTI_THREAD_STATE_VENDOR_3: c_uint = 1073741824;
42
43pub const JVMTI_JAVA_LANG_THREAD_STATE_MASK: c_uint = 1207;
44pub const JVMTI_JAVA_LANG_THREAD_STATE_NEW: c_uint = 0;
45pub const JVMTI_JAVA_LANG_THREAD_STATE_TERMINATED: c_uint = 2;
46pub const JVMTI_JAVA_LANG_THREAD_STATE_RUNNABLE: c_uint = 5;
47pub const JVMTI_JAVA_LANG_THREAD_STATE_BLOCKED: c_uint = 1025;
48pub const JVMTI_JAVA_LANG_THREAD_STATE_WAITING: c_uint = 145;
49pub const JVMTI_JAVA_LANG_THREAD_STATE_TIMED_WAITING: c_uint = 161;
50
51pub const JVMTI_THREAD_MIN_PRIORITY: c_uint = 1;
52pub const JVMTI_THREAD_NORM_PRIORITY: c_uint = 5;
53pub const JVMTI_THREAD_MAX_PRIORITY: c_uint = 10;
54
55pub const JVMTI_HEAP_FILTER_TAGGED: c_uint = 4;
56pub const JVMTI_HEAP_FILTER_UNTAGGED: c_uint = 8;
57pub const JVMTI_HEAP_FILTER_CLASS_TAGGED: c_uint = 16;
58pub const JVMTI_HEAP_FILTER_CLASS_UNTAGGED: c_uint = 32;
59
60pub const JVMTI_VISIT_OBJECTS: c_uint = 256;
61pub const JVMTI_VISIT_ABORT: c_uint = 32768;
62
63#[derive(Clone, Copy)]
64#[repr(C)]
65pub enum jvmtiHeapReferenceKind {
66    JVMTI_HEAP_REFERENCE_CLASS = 1,
67    JVMTI_HEAP_REFERENCE_FIELD = 2,
68    JVMTI_HEAP_REFERENCE_ARRAY_ELEMENT = 3,
69    JVMTI_HEAP_REFERENCE_CLASS_LOADER = 4,
70    JVMTI_HEAP_REFERENCE_SIGNERS = 5,
71    JVMTI_HEAP_REFERENCE_PROTECTION_DOMAIN = 6,
72    JVMTI_HEAP_REFERENCE_INTERFACE = 7,
73    JVMTI_HEAP_REFERENCE_STATIC_FIELD = 8,
74    JVMTI_HEAP_REFERENCE_CONSTANT_POOL = 9,
75    JVMTI_HEAP_REFERENCE_SUPERCLASS = 10,
76    JVMTI_HEAP_REFERENCE_JNI_GLOBAL = 21,
77    JVMTI_HEAP_REFERENCE_SYSTEM_CLASS = 22,
78    JVMTI_HEAP_REFERENCE_MONITOR = 23,
79    JVMTI_HEAP_REFERENCE_STACK_LOCAL = 24,
80    JVMTI_HEAP_REFERENCE_JNI_LOCAL = 25,
81    JVMTI_HEAP_REFERENCE_THREAD = 26,
82    JVMTI_HEAP_REFERENCE_OTHER = 27,
83}
84
85#[derive(Clone, Copy)]
86#[repr(C)]
87pub enum jvmtiPrimitiveType {
88    JVMTI_PRIMITIVE_TYPE_BOOLEAN = 90,
89    JVMTI_PRIMITIVE_TYPE_BYTE = 66,
90    JVMTI_PRIMITIVE_TYPE_CHAR = 67,
91    JVMTI_PRIMITIVE_TYPE_SHORT = 83,
92    JVMTI_PRIMITIVE_TYPE_INT = 73,
93    JVMTI_PRIMITIVE_TYPE_LONG = 74,
94    JVMTI_PRIMITIVE_TYPE_FLOAT = 70,
95    JVMTI_PRIMITIVE_TYPE_DOUBLE = 68,
96}
97
98#[derive(Clone, Copy)]
99#[repr(C)]
100pub enum jvmtiHeapObjectFilter {
101    JVMTI_HEAP_OBJECT_TAGGED = 1,
102    JVMTI_HEAP_OBJECT_UNTAGGED = 2,
103    JVMTI_HEAP_OBJECT_EITHER = 3,
104}
105
106#[derive(Clone, Copy)]
107#[repr(C)]
108pub enum jvmtiHeapRootKind {
109    JVMTI_HEAP_ROOT_JNI_GLOBAL = 1,
110    JVMTI_HEAP_ROOT_SYSTEM_CLASS = 2,
111    JVMTI_HEAP_ROOT_MONITOR = 3,
112    JVMTI_HEAP_ROOT_STACK_LOCAL = 4,
113    JVMTI_HEAP_ROOT_JNI_LOCAL = 5,
114    JVMTI_HEAP_ROOT_THREAD = 6,
115    JVMTI_HEAP_ROOT_OTHER = 7,
116}
117
118#[derive(Clone, Copy)]
119#[repr(C)]
120pub enum jvmtiObjectReferenceKind {
121    JVMTI_REFERENCE_CLASS = 1,
122    JVMTI_REFERENCE_FIELD = 2,
123    JVMTI_REFERENCE_ARRAY_ELEMENT = 3,
124    JVMTI_REFERENCE_CLASS_LOADER = 4,
125    JVMTI_REFERENCE_SIGNERS = 5,
126    JVMTI_REFERENCE_PROTECTION_DOMAIN = 6,
127    JVMTI_REFERENCE_INTERFACE = 7,
128    JVMTI_REFERENCE_STATIC_FIELD = 8,
129    JVMTI_REFERENCE_CONSTANT_POOL = 9,
130}
131
132#[derive(Clone, Copy)]
133#[repr(C)]
134pub enum jvmtiIterationControl {
135    JVMTI_ITERATION_CONTINUE = 1,
136    JVMTI_ITERATION_IGNORE = 2,
137    JVMTI_ITERATION_ABORT = 0,
138}
139
140pub const JVMTI_CLASS_STATUS_VERIFIED: c_uint = 1;
141pub const JVMTI_CLASS_STATUS_PREPARED: c_uint = 2;
142pub const JVMTI_CLASS_STATUS_INITIALIZED: c_uint = 4;
143pub const JVMTI_CLASS_STATUS_ERROR: c_uint = 8;
144pub const JVMTI_CLASS_STATUS_ARRAY: c_uint = 16;
145pub const JVMTI_CLASS_STATUS_PRIMITIVE: c_uint = 32;
146
147#[derive(Clone, Copy)]
148#[repr(C)]
149pub enum jvmtiEventMode {
150    JVMTI_ENABLE = 1,
151    JVMTI_DISABLE = 0,
152}
153
154#[derive(Clone, Copy)]
155#[repr(C)]
156pub enum jvmtiParamTypes {
157    JVMTI_TYPE_JBYTE = 101,
158    JVMTI_TYPE_JCHAR = 102,
159    JVMTI_TYPE_JSHORT = 103,
160    JVMTI_TYPE_JINT = 104,
161    JVMTI_TYPE_JLONG = 105,
162    JVMTI_TYPE_JFLOAT = 106,
163    JVMTI_TYPE_JDOUBLE = 107,
164    JVMTI_TYPE_JBOOLEAN = 108,
165    JVMTI_TYPE_JOBJECT = 109,
166    JVMTI_TYPE_JTHREAD = 110,
167    JVMTI_TYPE_JCLASS = 111,
168    JVMTI_TYPE_JVALUE = 112,
169    JVMTI_TYPE_JFIELDID = 113,
170    JVMTI_TYPE_JMETHODID = 114,
171    JVMTI_TYPE_CCHAR = 115,
172    JVMTI_TYPE_CVOID = 116,
173    JVMTI_TYPE_JNIENV = 117,
174}
175
176#[derive(Clone, Copy)]
177#[repr(C)]
178pub enum jvmtiParamKind {
179    JVMTI_KIND_IN = 91,
180    JVMTI_KIND_IN_PTR = 92,
181    JVMTI_KIND_IN_BUF = 93,
182    JVMTI_KIND_ALLOC_BUF = 94,
183    JVMTI_KIND_ALLOC_ALLOC_BUF = 95,
184    JVMTI_KIND_OUT = 96,
185    JVMTI_KIND_OUT_BUF = 97,
186}
187
188#[derive(Clone, Copy)]
189#[repr(C)]
190pub enum jvmtiTimerKind {
191    JVMTI_TIMER_USER_CPU = 30,
192    JVMTI_TIMER_TOTAL_CPU = 31,
193    JVMTI_TIMER_ELAPSED = 32,
194}
195
196#[derive(Clone, Copy)]
197#[repr(C)]
198pub enum jvmtiPhase {
199    JVMTI_PHASE_ONLOAD = 1,
200    JVMTI_PHASE_PRIMORDIAL = 2,
201    JVMTI_PHASE_START = 6,
202    JVMTI_PHASE_LIVE = 4,
203    JVMTI_PHASE_DEAD = 8,
204}
205
206pub const JVMTI_VERSION_INTERFACE_JNI: c_uint = 0;
207pub const JVMTI_VERSION_INTERFACE_JVMTI: c_uint = 805306368;
208
209pub const JVMTI_VERSION_MASK_INTERFACE_TYPE: c_uint = 1879048192;
210pub const JVMTI_VERSION_MASK_MAJOR: c_uint = 268369920;
211pub const JVMTI_VERSION_MASK_MINOR: c_uint = 65280;
212pub const JVMTI_VERSION_MASK_MICRO: c_uint = 255;
213
214pub const JVMTI_VERSION_SHIFT_MAJOR: c_uint = 16;
215pub const JVMTI_VERSION_SHIFT_MINOR: c_uint = 8;
216pub const JVMTI_VERSION_SHIFT_MICRO: c_uint = 0;
217
218#[derive(Clone, Copy)]
219#[repr(C)]
220pub enum jvmtiVerboseFlag {
221    JVMTI_VERBOSE_OTHER = 0,
222    JVMTI_VERBOSE_GC = 1,
223    JVMTI_VERBOSE_CLASS = 2,
224    JVMTI_VERBOSE_JNI = 4,
225}
226
227#[derive(Clone, Copy)]
228#[repr(C)]
229pub enum jvmtiJlocationFormat {
230    JVMTI_JLOCATION_JVMBCI = 1,
231    JVMTI_JLOCATION_MACHINEPC = 2,
232    JVMTI_JLOCATION_OTHER = 0,
233}
234
235pub const JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR: c_uint = 1;
236pub const JVMTI_RESOURCE_EXHAUSTED_JAVA_HEAP: c_uint = 2;
237pub const JVMTI_RESOURCE_EXHAUSTED_THREADS: c_uint = 4;
238
239#[derive(Clone, Copy, Debug)]
240#[repr(C)]
241pub enum jvmtiError {
242    JVMTI_ERROR_NONE = 0,
243    JVMTI_ERROR_INVALID_THREAD = 10,
244    JVMTI_ERROR_INVALID_THREAD_GROUP = 11,
245    JVMTI_ERROR_INVALID_PRIORITY = 12,
246    JVMTI_ERROR_THREAD_NOT_SUSPENDED = 13,
247    JVMTI_ERROR_THREAD_SUSPENDED = 14,
248    JVMTI_ERROR_THREAD_NOT_ALIVE = 15,
249    JVMTI_ERROR_INVALID_OBJECT = 20,
250    JVMTI_ERROR_INVALID_CLASS = 21,
251    JVMTI_ERROR_CLASS_NOT_PREPARED = 22,
252    JVMTI_ERROR_INVALID_METHODID = 23,
253    JVMTI_ERROR_INVALID_LOCATION = 24,
254    JVMTI_ERROR_INVALID_FIELDID = 25,
255    JVMTI_ERROR_NO_MORE_FRAMES = 31,
256    JVMTI_ERROR_OPAQUE_FRAME = 32,
257    JVMTI_ERROR_TYPE_MISMATCH = 34,
258    JVMTI_ERROR_INVALID_SLOT = 35,
259    JVMTI_ERROR_DUPLICATE = 40,
260    JVMTI_ERROR_NOT_FOUND = 41,
261    JVMTI_ERROR_INVALID_MONITOR = 50,
262    JVMTI_ERROR_NOT_MONITOR_OWNER = 51,
263    JVMTI_ERROR_INTERRUPT = 52,
264    JVMTI_ERROR_INVALID_CLASS_FORMAT = 60,
265    JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION = 61,
266    JVMTI_ERROR_FAILS_VERIFICATION = 62,
267    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED = 63,
268    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED = 64,
269    JVMTI_ERROR_INVALID_TYPESTATE = 65,
270    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED = 66,
271    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED = 67,
272    JVMTI_ERROR_UNSUPPORTED_VERSION = 68,
273    JVMTI_ERROR_NAMES_DONT_MATCH = 69,
274    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED = 70,
275    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED = 71,
276    JVMTI_ERROR_UNMODIFIABLE_CLASS = 79,
277    JVMTI_ERROR_NOT_AVAILABLE = 98,
278    JVMTI_ERROR_MUST_POSSESS_CAPABILITY = 99,
279    JVMTI_ERROR_NULL_POINTER = 100,
280    JVMTI_ERROR_ABSENT_INFORMATION = 101,
281    JVMTI_ERROR_INVALID_EVENT_TYPE = 102,
282    JVMTI_ERROR_ILLEGAL_ARGUMENT = 103,
283    JVMTI_ERROR_NATIVE_METHOD = 104,
284    JVMTI_ERROR_CLASS_LOADER_UNSUPPORTED = 106,
285    JVMTI_ERROR_OUT_OF_MEMORY = 110,
286    JVMTI_ERROR_ACCESS_DENIED = 111,
287    JVMTI_ERROR_WRONG_PHASE = 112,
288    JVMTI_ERROR_INTERNAL = 113,
289    JVMTI_ERROR_UNATTACHED_THREAD = 115,
290    JVMTI_ERROR_INVALID_ENVIRONMENT = 116,
291}
292pub const JVMTI_ERROR_MAX: c_uint = 116;
293
294pub const JVMTI_MIN_EVENT_TYPE_VAL: c_uint = 50;
295#[derive(Clone, Copy)]
296#[repr(C)]
297pub enum jvmtiEvent {
298    JVMTI_EVENT_VM_INIT = 50,
299    JVMTI_EVENT_VM_DEATH = 51,
300    JVMTI_EVENT_THREAD_START = 52,
301    JVMTI_EVENT_THREAD_END = 53,
302    JVMTI_EVENT_CLASS_FILE_LOAD_HOOK = 54,
303    JVMTI_EVENT_CLASS_LOAD = 55,
304    JVMTI_EVENT_CLASS_PREPARE = 56,
305    JVMTI_EVENT_VM_START = 57,
306    JVMTI_EVENT_EXCEPTION = 58,
307    JVMTI_EVENT_EXCEPTION_CATCH = 59,
308    JVMTI_EVENT_SINGLE_STEP = 60,
309    JVMTI_EVENT_FRAME_POP = 61,
310    JVMTI_EVENT_BREAKPOINT = 62,
311    JVMTI_EVENT_FIELD_ACCESS = 63,
312    JVMTI_EVENT_FIELD_MODIFICATION = 64,
313    JVMTI_EVENT_METHOD_ENTRY = 65,
314    JVMTI_EVENT_METHOD_EXIT = 66,
315    JVMTI_EVENT_NATIVE_METHOD_BIND = 67,
316    JVMTI_EVENT_COMPILED_METHOD_LOAD = 68,
317    JVMTI_EVENT_COMPILED_METHOD_UNLOAD = 69,
318    JVMTI_EVENT_DYNAMIC_CODE_GENERATED = 70,
319    JVMTI_EVENT_DATA_DUMP_REQUEST = 71,
320    JVMTI_EVENT_MONITOR_WAIT = 73,
321    JVMTI_EVENT_MONITOR_WAITED = 74,
322    JVMTI_EVENT_MONITOR_CONTENDED_ENTER = 75,
323    JVMTI_EVENT_MONITOR_CONTENDED_ENTERED = 76,
324    JVMTI_EVENT_RESOURCE_EXHAUSTED = 80,
325    JVMTI_EVENT_GARBAGE_COLLECTION_START = 81,
326    JVMTI_EVENT_GARBAGE_COLLECTION_FINISH = 82,
327    JVMTI_EVENT_OBJECT_FREE = 83,
328    JVMTI_EVENT_VM_OBJECT_ALLOC = 84,
329}
330pub const JVMTI_MAX_EVENT_TYPE_VAL: c_uint = 84;
331
332//#[allow(non_camel_case_types)]
333//pub type jvmtiThreadInfo = Struct__jvmtiThreadInfo;
334//#[allow(non_camel_case_types)]
335//pub type jvmtiMonitorStackDepthInfo = Struct__jvmtiMonitorStackDepthInfo;
336//#[allow(non_camel_case_types)]
337//pub type jvmtiThreadGroupInfo = Struct__jvmtiThreadGroupInfo;
338//#[allow(non_camel_case_types)]
339//pub type jvmtiFrameInfo = Struct__jvmtiFrameInfo;
340//#[allow(non_camel_case_types)]
341//pub type jvmtiStackInfo = Struct__jvmtiStackInfo;
342//#[allow(non_camel_case_types)]
343//pub type jvmtiHeapReferenceInfoField = Struct__jvmtiHeapReferenceInfoField;
344//#[allow(non_camel_case_types)]
345//pub type jvmtiHeapReferenceInfoArray = Struct__jvmtiHeapReferenceInfoArray;
346//#[allow(non_camel_case_types)]
347//pub type jvmtiHeapReferenceInfoConstantPool = Struct__jvmtiHeapReferenceInfoConstantPool;
348//#[allow(non_camel_case_types)]
349//pub type jvmtiHeapReferenceInfoStackLocal = Struct__jvmtiHeapReferenceInfoStackLocal;
350//#[allow(non_camel_case_types)]
351//pub type jvmtiHeapReferenceInfoJniLocal = Struct__jvmtiHeapReferenceInfoJniLocal;
352//#[allow(non_camel_case_types)]
353//pub type jvmtiHeapReferenceInfoReserved = Struct__jvmtiHeapReferenceInfoReserved;
354//#[allow(non_camel_case_types)]
355//pub type jvmtiHeapReferenceInfo = Union__jvmtiHeapReferenceInfo;
356//#[allow(non_camel_case_types)]
357//pub type jvmtiHeapCallbacks = Struct__jvmtiHeapCallbacks;
358//#[allow(non_camel_case_types)]
359//pub type jvmtiClassDefinition = Struct__jvmtiClassDefinition;
360//#[allow(non_camel_case_types)]
361//pub type jvmtiMonitorUsage = Struct__jvmtiMonitorUsage;
362//#[allow(non_camel_case_types)]
363//pub type jvmtiLineNumberEntry = Struct__jvmtiLineNumberEntry;
364//#[allow(non_camel_case_types)]
365//pub type jvmtiLocalVariableEntry = Struct__jvmtiLocalVariableEntry;
366//#[allow(non_camel_case_types)]
367//pub type jvmtiParamInfo = Struct__jvmtiParamInfo;
368//#[allow(non_camel_case_types)]
369//pub type jvmtiExtensionFunctionInfo = Struct__jvmtiExtensionFunctionInfo;
370//#[allow(non_camel_case_types)]
371//pub type jvmtiExtensionEventInfo = Struct__jvmtiExtensionEventInfo;
372//#[allow(non_camel_case_types)]
373//pub type jvmtiTimerInfo = Struct__jvmtiTimerInfo;
374//#[allow(non_camel_case_types)]
375//pub type jvmtiAddrLocationMap = Struct__jvmtiAddrLocationMap;
376//#[allow(non_camel_case_types)]
377
378pub type jvmtiStartFunction = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
379                                                          jni_env: *mut JNIEnv,
380                                                          arg: *mut c_void)
381                                                          -> ()>;
382pub type jvmtiHeapIterationCallback = Option<unsafe extern "C" fn(class_tag: jlong,
383                                                                  size: jlong,
384                                                                  tag_ptr: *mut jlong,
385                                                                  length: jint,
386                                                                  user_data: *mut c_void)
387                                                                  -> jint>;
388pub type jvmtiHeapReferenceCallback =
389    Option<unsafe extern "C" fn(reference_kind: jvmtiHeapReferenceKind,
390                                reference_info: *const jvmtiHeapReferenceInfo,
391                                class_tag: jlong,
392                                referrer_class_tag: jlong,
393                                size: jlong,
394                                tag_ptr: *mut jlong,
395                                referrer_tag_ptr: *mut jlong,
396                                length: jint,
397                                user_data: *mut c_void)
398                                -> jint>;
399pub type jvmtiPrimitiveFieldCallback =
400    Option<unsafe extern "C" fn(kind: jvmtiHeapReferenceKind,
401                                info: *const jvmtiHeapReferenceInfo,
402                                object_class_tag: jlong,
403                                object_tag_ptr: *mut jlong,
404                                value: jvalue,
405                                value_type: jvmtiPrimitiveType,
406                                user_data: *mut c_void)
407                                -> jint>;
408pub type jvmtiArrayPrimitiveValueCallback =
409    Option<unsafe extern "C" fn(class_tag: jlong,
410                                size: jlong,
411                                tag_ptr: *mut jlong,
412                                element_count: jint,
413                                element_type: jvmtiPrimitiveType,
414                                elements: *const c_void,
415                                user_data: *mut c_void)
416                                -> jint>;
417pub type jvmtiStringPrimitiveValueCallback = Option<unsafe extern "C" fn(class_tag: jlong,
418                                                                         size: jlong,
419                                                                         tag_ptr: *mut jlong,
420                                                                         value: *const jchar,
421                                                                         value_length: jint,
422                                                                         user_data: *mut c_void)
423                                                                         -> jint>;
424pub type jvmtiReservedCallback = Option<extern "C" fn() -> jint>;
425pub type jvmtiHeapObjectCallback = Option<unsafe extern "C" fn(class_tag: jlong,
426                                                               size: jlong,
427                                                               tag_ptr: *mut jlong,
428                                                               user_data: *mut c_void)
429                                                               -> jvmtiIterationControl>;
430pub type jvmtiHeapRootCallback = Option<unsafe extern "C" fn(root_kind: jvmtiHeapRootKind,
431                                                             class_tag: jlong,
432                                                             size: jlong,
433                                                             tag_ptr: *mut jlong,
434                                                             user_data: *mut c_void)
435                                                             -> jvmtiIterationControl>;
436pub type jvmtiStackReferenceCallback = Option<unsafe extern "C" fn(root_kind: jvmtiHeapRootKind,
437                                                                   class_tag: jlong,
438                                                                   size: jlong,
439                                                                   tag_ptr: *mut jlong,
440                                                                   thread_tag: jlong,
441                                                                   depth: jint,
442                                                                   method: jmethodID,
443                                                                   slot: jint,
444                                                                   user_data: *mut c_void)
445                                                                   -> jvmtiIterationControl>;
446pub type jvmtiObjectReferenceCallback =
447    Option<unsafe extern "C" fn(reference_kind: jvmtiObjectReferenceKind,
448                                class_tag: jlong,
449                                size: jlong,
450                                tag_ptr: *mut jlong,
451                                referrer_tag: jlong,
452                                referrer_index: jint,
453                                user_data: *mut c_void)
454                                -> jvmtiIterationControl>;
455pub type jvmtiExtensionFunction = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, ...)
456                                                              -> jvmtiError>;
457pub type jvmtiExtensionEvent = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, ...) -> ()>;
458
459#[repr(C)]
460#[derive(Copy)]
461pub struct jvmtiThreadInfo {
462    pub name: *mut c_char,
463    pub priority: jint,
464    pub is_daemon: jboolean,
465    pub thread_group: jthreadGroup,
466    pub context_class_loader: jobject,
467}
468impl Clone for jvmtiThreadInfo {
469    fn clone(&self) -> Self {
470        *self
471    }
472}
473impl Default for jvmtiThreadInfo {
474    fn default() -> Self {
475        unsafe { mem::zeroed() }
476    }
477}
478
479#[repr(C)]
480#[derive(Copy)]
481pub struct jvmtiMonitorStackDepthInfo {
482    pub monitor: jobject,
483    pub stack_depth: jint,
484}
485impl Clone for jvmtiMonitorStackDepthInfo {
486    fn clone(&self) -> Self {
487        *self
488    }
489}
490impl Default for jvmtiMonitorStackDepthInfo {
491    fn default() -> Self {
492        unsafe { mem::zeroed() }
493    }
494}
495
496#[repr(C)]
497#[derive(Copy)]
498pub struct jvmtiThreadGroupInfo {
499    pub parent: jthreadGroup,
500    pub name: *mut c_char,
501    pub max_priority: jint,
502    pub is_daemon: jboolean,
503}
504impl Clone for jvmtiThreadGroupInfo {
505    fn clone(&self) -> Self {
506        *self
507    }
508}
509impl Default for jvmtiThreadGroupInfo {
510    fn default() -> Self {
511        unsafe { mem::zeroed() }
512    }
513}
514
515#[repr(C)]
516#[derive(Copy)]
517pub struct jvmtiFrameInfo {
518    pub method: jmethodID,
519    pub location: jlocation,
520}
521impl Clone for jvmtiFrameInfo {
522    fn clone(&self) -> Self {
523        *self
524    }
525}
526impl Default for jvmtiFrameInfo {
527    fn default() -> Self {
528        unsafe { mem::zeroed() }
529    }
530}
531
532#[repr(C)]
533#[derive(Copy)]
534pub struct jvmtiStackInfo {
535    pub thread: jthread,
536    pub state: jint,
537    pub frame_buffer: *mut jvmtiFrameInfo,
538    pub frame_count: jint,
539}
540impl Clone for jvmtiStackInfo {
541    fn clone(&self) -> Self {
542        *self
543    }
544}
545impl Default for jvmtiStackInfo {
546    fn default() -> Self {
547        unsafe { mem::zeroed() }
548    }
549}
550
551#[repr(C)]
552#[derive(Copy)]
553pub struct jvmtiHeapReferenceInfoField {
554    pub index: jint,
555}
556impl Clone for jvmtiHeapReferenceInfoField {
557    fn clone(&self) -> Self {
558        *self
559    }
560}
561impl Default for jvmtiHeapReferenceInfoField {
562    fn default() -> Self {
563        unsafe { mem::zeroed() }
564    }
565}
566
567#[repr(C)]
568#[derive(Copy)]
569pub struct jvmtiHeapReferenceInfoArray {
570    pub index: jint,
571}
572impl Clone for jvmtiHeapReferenceInfoArray {
573    fn clone(&self) -> Self {
574        *self
575    }
576}
577impl Default for jvmtiHeapReferenceInfoArray {
578    fn default() -> Self {
579        unsafe { mem::zeroed() }
580    }
581}
582
583#[repr(C)]
584#[derive(Copy)]
585pub struct jvmtiHeapReferenceInfoConstantPool {
586    pub index: jint,
587}
588impl Clone for jvmtiHeapReferenceInfoConstantPool {
589    fn clone(&self) -> Self {
590        *self
591    }
592}
593impl Default for jvmtiHeapReferenceInfoConstantPool {
594    fn default() -> Self {
595        unsafe { mem::zeroed() }
596    }
597}
598
599#[repr(C)]
600#[derive(Copy)]
601pub struct jvmtiHeapReferenceInfoStackLocal {
602    pub thread_tag: jlong,
603    pub thread_id: jlong,
604    pub depth: jint,
605    pub method: jmethodID,
606    pub location: jlocation,
607    pub slot: jint,
608}
609impl Clone for jvmtiHeapReferenceInfoStackLocal {
610    fn clone(&self) -> Self {
611        *self
612    }
613}
614impl Default for jvmtiHeapReferenceInfoStackLocal {
615    fn default() -> Self {
616        unsafe { mem::zeroed() }
617    }
618}
619
620#[repr(C)]
621#[derive(Copy)]
622pub struct jvmtiHeapReferenceInfoJniLocal {
623    pub thread_tag: jlong,
624    pub thread_id: jlong,
625    pub depth: jint,
626    pub method: jmethodID,
627}
628impl Clone for jvmtiHeapReferenceInfoJniLocal {
629    fn clone(&self) -> Self {
630        *self
631    }
632}
633impl Default for jvmtiHeapReferenceInfoJniLocal {
634    fn default() -> Self {
635        unsafe { mem::zeroed() }
636    }
637}
638
639#[repr(C)]
640#[derive(Copy)]
641pub struct jvmtiHeapReferenceInfoReserved {
642    pub reserved1: jlong,
643    pub reserved2: jlong,
644    pub reserved3: jlong,
645    pub reserved4: jlong,
646    pub reserved5: jlong,
647    pub reserved6: jlong,
648    pub reserved7: jlong,
649    pub reserved8: jlong,
650}
651impl Clone for jvmtiHeapReferenceInfoReserved {
652    fn clone(&self) -> Self {
653        *self
654    }
655}
656impl Default for jvmtiHeapReferenceInfoReserved {
657    fn default() -> Self {
658        unsafe { mem::zeroed() }
659    }
660}
661
662#[repr(C)]
663#[derive(Copy)]
664pub struct jvmtiHeapReferenceInfo {
665    pub _bindgen_data_: [u64; 8usize],
666}
667impl jvmtiHeapReferenceInfo {
668    pub unsafe fn field(&mut self) -> *mut jvmtiHeapReferenceInfoField {
669        let raw: *mut u8 = mem::transmute(&self._bindgen_data_);
670        mem::transmute(raw.offset(0))
671    }
672    pub unsafe fn array(&mut self) -> *mut jvmtiHeapReferenceInfoArray {
673        let raw: *mut u8 = mem::transmute(&self._bindgen_data_);
674        mem::transmute(raw.offset(0))
675    }
676    pub unsafe fn constant_pool(&mut self) -> *mut jvmtiHeapReferenceInfoConstantPool {
677        let raw: *mut u8 = mem::transmute(&self._bindgen_data_);
678        mem::transmute(raw.offset(0))
679    }
680    pub unsafe fn stack_local(&mut self) -> *mut jvmtiHeapReferenceInfoStackLocal {
681        let raw: *mut u8 = mem::transmute(&self._bindgen_data_);
682        mem::transmute(raw.offset(0))
683    }
684    pub unsafe fn jni_local(&mut self) -> *mut jvmtiHeapReferenceInfoJniLocal {
685        let raw: *mut u8 = mem::transmute(&self._bindgen_data_);
686        mem::transmute(raw.offset(0))
687    }
688    pub unsafe fn other(&mut self) -> *mut jvmtiHeapReferenceInfoReserved {
689        let raw: *mut u8 = mem::transmute(&self._bindgen_data_);
690        mem::transmute(raw.offset(0))
691    }
692}
693impl Clone for jvmtiHeapReferenceInfo {
694    fn clone(&self) -> Self {
695        *self
696    }
697}
698impl Default for jvmtiHeapReferenceInfo {
699    fn default() -> Self {
700        unsafe { mem::zeroed() }
701    }
702}
703
704#[repr(C)]
705#[derive(Copy)]
706pub struct jvmtiHeapCallbacks {
707    pub heap_iteration_callback: jvmtiHeapIterationCallback,
708    pub heap_reference_callback: jvmtiHeapReferenceCallback,
709    pub primitive_field_callback: jvmtiPrimitiveFieldCallback,
710    pub array_primitive_value_callback: jvmtiArrayPrimitiveValueCallback,
711    pub string_primitive_value_callback: jvmtiStringPrimitiveValueCallback,
712    pub reserved5: jvmtiReservedCallback,
713    pub reserved6: jvmtiReservedCallback,
714    pub reserved7: jvmtiReservedCallback,
715    pub reserved8: jvmtiReservedCallback,
716    pub reserved9: jvmtiReservedCallback,
717    pub reserved10: jvmtiReservedCallback,
718    pub reserved11: jvmtiReservedCallback,
719    pub reserved12: jvmtiReservedCallback,
720    pub reserved13: jvmtiReservedCallback,
721    pub reserved14: jvmtiReservedCallback,
722    pub reserved15: jvmtiReservedCallback,
723}
724impl Clone for jvmtiHeapCallbacks {
725    fn clone(&self) -> Self {
726        *self
727    }
728}
729impl Default for jvmtiHeapCallbacks {
730    fn default() -> Self {
731        unsafe { mem::zeroed() }
732    }
733}
734
735#[repr(C)]
736#[derive(Copy)]
737pub struct jvmtiClassDefinition {
738    pub klass: jclass,
739    pub class_byte_count: jint,
740    pub class_bytes: *const c_uchar,
741}
742impl Clone for jvmtiClassDefinition {
743    fn clone(&self) -> Self {
744        *self
745    }
746}
747impl Default for jvmtiClassDefinition {
748    fn default() -> Self {
749        unsafe { mem::zeroed() }
750    }
751}
752
753#[repr(C)]
754#[derive(Copy)]
755pub struct jvmtiMonitorUsage {
756    pub owner: jthread,
757    pub entry_count: jint,
758    pub waiter_count: jint,
759    pub waiters: *mut jthread,
760    pub notify_waiter_count: jint,
761    pub notify_waiters: *mut jthread,
762}
763impl Clone for jvmtiMonitorUsage {
764    fn clone(&self) -> Self {
765        *self
766    }
767}
768impl Default for jvmtiMonitorUsage {
769    fn default() -> Self {
770        unsafe { mem::zeroed() }
771    }
772}
773
774#[repr(C)]
775#[derive(Copy)]
776pub struct jvmtiLineNumberEntry {
777    pub start_location: jlocation,
778    pub line_number: jint,
779}
780impl Clone for jvmtiLineNumberEntry {
781    fn clone(&self) -> Self {
782        *self
783    }
784}
785impl Default for jvmtiLineNumberEntry {
786    fn default() -> Self {
787        unsafe { mem::zeroed() }
788    }
789}
790
791#[repr(C)]
792#[derive(Copy)]
793pub struct jvmtiLocalVariableEntry {
794    pub start_location: jlocation,
795    pub length: jint,
796    pub name: *mut c_char,
797    pub signature: *mut c_char,
798    pub generic_signature: *mut c_char,
799    pub slot: jint,
800}
801impl Clone for jvmtiLocalVariableEntry {
802    fn clone(&self) -> Self {
803        *self
804    }
805}
806impl Default for jvmtiLocalVariableEntry {
807    fn default() -> Self {
808        unsafe { mem::zeroed() }
809    }
810}
811
812#[repr(C)]
813#[derive(Copy)]
814pub struct jvmtiParamInfo {
815    pub name: *mut c_char,
816    pub kind: jvmtiParamKind,
817    pub base_type: jvmtiParamTypes,
818    pub null_ok: jboolean,
819}
820impl Clone for jvmtiParamInfo {
821    fn clone(&self) -> Self {
822        *self
823    }
824}
825impl Default for jvmtiParamInfo {
826    fn default() -> Self {
827        unsafe { mem::zeroed() }
828    }
829}
830
831#[repr(C)]
832#[derive(Copy)]
833pub struct jvmtiExtensionFunctionInfo {
834    pub func: jvmtiExtensionFunction,
835    pub id: *mut c_char,
836    pub short_description: *mut c_char,
837    pub param_count: jint,
838    pub params: *mut jvmtiParamInfo,
839    pub error_count: jint,
840    pub errors: *mut jvmtiError,
841}
842impl Clone for jvmtiExtensionFunctionInfo {
843    fn clone(&self) -> Self {
844        *self
845    }
846}
847impl Default for jvmtiExtensionFunctionInfo {
848    fn default() -> Self {
849        unsafe { mem::zeroed() }
850    }
851}
852
853#[repr(C)]
854#[derive(Copy)]
855pub struct jvmtiExtensionEventInfo {
856    pub extension_event_index: jint,
857    pub id: *mut c_char,
858    pub short_description: *mut c_char,
859    pub param_count: jint,
860    pub params: *mut jvmtiParamInfo,
861}
862impl Clone for jvmtiExtensionEventInfo {
863    fn clone(&self) -> Self {
864        *self
865    }
866}
867impl Default for jvmtiExtensionEventInfo {
868    fn default() -> Self {
869        unsafe { mem::zeroed() }
870    }
871}
872
873#[repr(C)]
874#[derive(Copy)]
875pub struct jvmtiTimerInfo {
876    pub max_value: jlong,
877    pub may_skip_forward: jboolean,
878    pub may_skip_backward: jboolean,
879    pub kind: jvmtiTimerKind,
880    pub reserved1: jlong,
881    pub reserved2: jlong,
882}
883impl Clone for jvmtiTimerInfo {
884    fn clone(&self) -> Self {
885        *self
886    }
887}
888impl Default for jvmtiTimerInfo {
889    fn default() -> Self {
890        unsafe { mem::zeroed() }
891    }
892}
893
894#[repr(C)]
895#[derive(Copy)]
896pub struct jvmtiAddrLocationMap {
897    pub start_address: *const c_void,
898    pub location: jlocation,
899}
900impl Clone for jvmtiAddrLocationMap {
901    fn clone(&self) -> Self {
902        *self
903    }
904}
905impl Default for jvmtiAddrLocationMap {
906    fn default() -> Self {
907        unsafe { mem::zeroed() }
908    }
909}
910
911#[repr(C)]
912#[derive(Copy)]
913pub struct jvmtiCapabilities {
914    pub _bindgen_bitfield_1_: c_uint,
915    pub _bindgen_bitfield_2_: c_uint,
916    pub _bindgen_bitfield_3_: c_uint,
917    pub _bindgen_bitfield_4_: c_uint,
918}
919impl Clone for jvmtiCapabilities {
920    fn clone(&self) -> Self {
921        *self
922    }
923}
924impl Default for jvmtiCapabilities {
925    fn default() -> Self {
926        unsafe { mem::zeroed() }
927    }
928}
929
930pub type jvmtiEventReserved = Option<extern "C" fn() -> ()>;
931pub type jvmtiEventBreakpoint = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
932                                                            jni_env: *mut JNIEnv,
933                                                            thread: jthread,
934                                                            method: jmethodID,
935                                                            location: jlocation)
936                                                            -> ()>;
937pub type jvmtiEventClassFileLoadHook =
938    Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
939                                jni_env: *mut JNIEnv,
940                                class_being_redefined: jclass,
941                                loader: jobject,
942                                name: *const c_char,
943                                protection_domain: jobject,
944                                class_data_len: jint,
945                                class_data: *const c_uchar,
946                                new_class_data_len: *mut jint,
947                                new_class_data: *mut *mut c_uchar)
948                                -> ()>;
949pub type jvmtiEventClassLoad = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
950                                                           jni_env: *mut JNIEnv,
951                                                           thread: jthread,
952                                                           klass: jclass)
953                                                           -> ()>;
954pub type jvmtiEventClassPrepare = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
955                                                              jni_env: *mut JNIEnv,
956                                                              thread: jthread,
957                                                              klass: jclass)
958                                                              -> ()>;
959pub type jvmtiEventCompiledMethodLoad =
960    Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
961                                method: jmethodID,
962                                code_size: jint,
963                                code_addr: *const c_void,
964                                map_length: jint,
965                                map: *const jvmtiAddrLocationMap,
966                                compile_info: *const c_void)
967                                -> ()>;
968pub type jvmtiEventCompiledMethodUnload = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
969                                                                      method: jmethodID,
970                                                                      code_addr: *const c_void)
971                                                                      -> ()>;
972pub type jvmtiEventDataDumpRequest = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv) -> ()>;
973pub type jvmtiEventDynamicCodeGenerated = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
974                                                                      name: *const c_char,
975                                                                      address: *const c_void,
976                                                                      length: jint)
977                                                                      -> ()>;
978pub type jvmtiEventException = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
979                                                           jni_env: *mut JNIEnv,
980                                                           thread: jthread,
981                                                           method: jmethodID,
982                                                           location: jlocation,
983                                                           exception: jobject,
984                                                           catch_method: jmethodID,
985                                                           catch_location: jlocation)
986                                                           -> ()>;
987pub type jvmtiEventExceptionCatch = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
988                                                                jni_env: *mut JNIEnv,
989                                                                thread: jthread,
990                                                                method: jmethodID,
991                                                                location: jlocation,
992                                                                exception: jobject)
993                                                                -> ()>;
994pub type jvmtiEventFieldAccess = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
995                                                             jni_env: *mut JNIEnv,
996                                                             thread: jthread,
997                                                             method: jmethodID,
998                                                             location: jlocation,
999                                                             field_klass: jclass,
1000                                                             object: jobject,
1001                                                             field: jfieldID)
1002                                                             -> ()>;
1003pub type jvmtiEventFieldModification = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1004                                                                   jni_env: *mut JNIEnv,
1005                                                                   thread: jthread,
1006                                                                   method: jmethodID,
1007                                                                   location: jlocation,
1008                                                                   field_klass: jclass,
1009                                                                   object: jobject,
1010                                                                   field: jfieldID,
1011                                                                   signature_type: c_char,
1012                                                                   new_value: jvalue)
1013                                                                   -> ()>;
1014pub type jvmtiEventFramePop = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1015                                                          jni_env: *mut JNIEnv,
1016                                                          thread: jthread,
1017                                                          method: jmethodID,
1018                                                          was_popped_by_exception: jboolean)
1019                                                          -> ()>;
1020pub type jvmtiEventGarbageCollectionFinish = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv)
1021                                                                         -> ()>;
1022pub type jvmtiEventGarbageCollectionStart = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv)
1023                                                                        -> ()>;
1024pub type jvmtiEventMethodEntry = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1025                                                             jni_env: *mut JNIEnv,
1026                                                             thread: jthread,
1027                                                             method: jmethodID)
1028                                                             -> ()>;
1029pub type jvmtiEventMethodExit = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1030                                                            jni_env: *mut JNIEnv,
1031                                                            thread: jthread,
1032                                                            method: jmethodID,
1033                                                            was_popped_by_exception: jboolean,
1034                                                            return_value: jvalue)
1035                                                            -> ()>;
1036pub type jvmtiEventMonitorContendedEnter = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1037                                                                       jni_env: *mut JNIEnv,
1038                                                                       thread: jthread,
1039                                                                       object: jobject)
1040                                                                       -> ()>;
1041pub type jvmtiEventMonitorContendedEntered = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1042                                                                         jni_env: *mut JNIEnv,
1043                                                                         thread: jthread,
1044                                                                         object: jobject)
1045                                                                         -> ()>;
1046pub type jvmtiEventMonitorWait = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1047                                                             jni_env: *mut JNIEnv,
1048                                                             thread: jthread,
1049                                                             object: jobject,
1050                                                             timeout: jlong)
1051                                                             -> ()>;
1052pub type jvmtiEventMonitorWaited = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1053                                                               jni_env: *mut JNIEnv,
1054                                                               thread: jthread,
1055                                                               object: jobject,
1056                                                               timed_out: jboolean)
1057                                                               -> ()>;
1058pub type jvmtiEventNativeMethodBind =
1059    Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1060                                jni_env: *mut JNIEnv,
1061                                thread: jthread,
1062                                method: jmethodID,
1063                                address: *mut c_void,
1064                                new_address_ptr: *mut *mut c_void)
1065                                -> ()>;
1066pub type jvmtiEventObjectFree = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, tag: jlong)
1067                                                            -> ()>;
1068pub type jvmtiEventResourceExhausted = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1069                                                                   jni_env: *mut JNIEnv,
1070                                                                   flags: jint,
1071                                                                   reserved: *const c_void,
1072                                                                   description: *const c_char)
1073                                                                   -> ()>;
1074pub type jvmtiEventSingleStep = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1075                                                            jni_env: *mut JNIEnv,
1076                                                            thread: jthread,
1077                                                            method: jmethodID,
1078                                                            location: jlocation)
1079                                                            -> ()>;
1080pub type jvmtiEventThreadEnd = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1081                                                           jni_env: *mut JNIEnv,
1082                                                           thread: jthread)
1083                                                           -> ()>;
1084pub type jvmtiEventThreadStart = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1085                                                             jni_env: *mut JNIEnv,
1086                                                             thread: jthread)
1087                                                             -> ()>;
1088pub type jvmtiEventVMDeath = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1089                                                         jni_env: *mut JNIEnv)
1090                                                         -> ()>;
1091pub type jvmtiEventVMInit = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1092                                                        jni_env: *mut JNIEnv,
1093                                                        thread: jthread)
1094                                                        -> ()>;
1095pub type jvmtiEventVMObjectAlloc = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1096                                                               jni_env: *mut JNIEnv,
1097                                                               thread: jthread,
1098                                                               object: jobject,
1099                                                               object_klass: jclass,
1100                                                               size: jlong)
1101                                                               -> ()>;
1102pub type jvmtiEventVMStart = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv,
1103                                                         jni_env: *mut JNIEnv)
1104                                                         -> ()>;
1105
1106#[repr(C)]
1107#[derive(Copy)]
1108pub struct jvmtiEventCallbacks {
1109    pub VMInit: jvmtiEventVMInit,
1110    pub VMDeath: jvmtiEventVMDeath,
1111    pub ThreadStart: jvmtiEventThreadStart,
1112    pub ThreadEnd: jvmtiEventThreadEnd,
1113    pub ClassFileLoadHook: jvmtiEventClassFileLoadHook,
1114    pub ClassLoad: jvmtiEventClassLoad,
1115    pub ClassPrepare: jvmtiEventClassPrepare,
1116    pub VMStart: jvmtiEventVMStart,
1117    pub Exception: jvmtiEventException,
1118    pub ExceptionCatch: jvmtiEventExceptionCatch,
1119    pub SingleStep: jvmtiEventSingleStep,
1120    pub FramePop: jvmtiEventFramePop,
1121    pub Breakpoint: jvmtiEventBreakpoint,
1122    pub FieldAccess: jvmtiEventFieldAccess,
1123    pub FieldModification: jvmtiEventFieldModification,
1124    pub MethodEntry: jvmtiEventMethodEntry,
1125    pub MethodExit: jvmtiEventMethodExit,
1126    pub NativeMethodBind: jvmtiEventNativeMethodBind,
1127    pub CompiledMethodLoad: jvmtiEventCompiledMethodLoad,
1128    pub CompiledMethodUnload: jvmtiEventCompiledMethodUnload,
1129    pub DynamicCodeGenerated: jvmtiEventDynamicCodeGenerated,
1130    pub DataDumpRequest: jvmtiEventDataDumpRequest,
1131    pub reserved72: jvmtiEventReserved,
1132    pub MonitorWait: jvmtiEventMonitorWait,
1133    pub MonitorWaited: jvmtiEventMonitorWaited,
1134    pub MonitorContendedEnter: jvmtiEventMonitorContendedEnter,
1135    pub MonitorContendedEntered: jvmtiEventMonitorContendedEntered,
1136    pub reserved77: jvmtiEventReserved,
1137    pub reserved78: jvmtiEventReserved,
1138    pub reserved79: jvmtiEventReserved,
1139    pub ResourceExhausted: jvmtiEventResourceExhausted,
1140    pub GarbageCollectionStart: jvmtiEventGarbageCollectionStart,
1141    pub GarbageCollectionFinish: jvmtiEventGarbageCollectionFinish,
1142    pub ObjectFree: jvmtiEventObjectFree,
1143    pub VMObjectAlloc: jvmtiEventVMObjectAlloc,
1144}
1145impl Clone for jvmtiEventCallbacks {
1146    fn clone(&self) -> Self {
1147        *self
1148    }
1149}
1150impl Default for jvmtiEventCallbacks {
1151    fn default() -> Self {
1152        unsafe { mem::zeroed() }
1153    }
1154}
1155
1156#[repr(C)]
1157#[derive(Copy)]
1158pub struct jvmtiInterface_1 {
1159    pub reserved1: *mut c_void,
1160    pub SetEventNotificationMode: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, mode: jvmtiEventMode, event_type: jvmtiEvent, event_thread: jthread, ...) -> jvmtiError>,
1161    pub reserved3: *mut c_void,
1162    pub GetAllThreads: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, threads_count_ptr: *mut jint, threads_ptr: *mut *mut jthread) -> jvmtiError>,
1163    pub SuspendThread: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread) -> jvmtiError>,
1164    pub ResumeThread: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread) -> jvmtiError>,
1165    pub StopThread: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, exception: jobject) -> jvmtiError>,
1166    pub InterruptThread: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread) -> jvmtiError>,
1167    pub GetThreadInfo: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, info_ptr: *mut jvmtiThreadInfo) -> jvmtiError>,
1168    pub GetOwnedMonitorInfo: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, owned_monitor_count_ptr: *mut jint, owned_monitors_ptr: *mut *mut jobject) -> jvmtiError>,
1169    pub GetCurrentContendedMonitor: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, monitor_ptr: *mut jobject) -> jvmtiError>,
1170    pub RunAgentThread: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, _proc: jvmtiStartFunction, arg: *const c_void, priority: jint) -> jvmtiError>,
1171    pub GetTopThreadGroups: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, group_count_ptr: *mut jint, groups_ptr: *mut *mut jthreadGroup) -> jvmtiError>,
1172    pub GetThreadGroupInfo: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, group: jthreadGroup, info_ptr: *mut jvmtiThreadGroupInfo) -> jvmtiError>,
1173    pub GetThreadGroupChildren: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, group: jthreadGroup, thread_count_ptr: *mut jint, threads_ptr: *mut *mut jthread, group_count_ptr: *mut jint, groups_ptr: *mut *mut jthreadGroup) -> jvmtiError>,
1174    pub GetFrameCount: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, count_ptr: *mut jint) -> jvmtiError>,
1175    pub GetThreadState: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, thread_state_ptr: *mut jint) -> jvmtiError>,
1176    pub GetCurrentThread: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread_ptr: *mut jthread) -> jvmtiError>,
1177    pub GetFrameLocation: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, method_ptr: *mut jmethodID, location_ptr: *mut jlocation) -> jvmtiError>,
1178    pub NotifyFramePop: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint) -> jvmtiError>,
1179    pub GetLocalObject: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value_ptr: *mut jobject) -> jvmtiError>,
1180    pub GetLocalInt: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value_ptr: *mut jint) -> jvmtiError>,
1181    pub GetLocalLong: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value_ptr: *mut jlong) -> jvmtiError>,
1182    pub GetLocalFloat: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value_ptr: *mut jfloat) -> jvmtiError>,
1183    pub GetLocalDouble: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value_ptr: *mut jdouble) -> jvmtiError>,
1184    pub SetLocalObject: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value: jobject) -> jvmtiError>,
1185    pub SetLocalInt: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value: jint) -> jvmtiError>,
1186    pub SetLocalLong: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value: jlong) -> jvmtiError>,
1187    pub SetLocalFloat: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value: jfloat) -> jvmtiError>,
1188    pub SetLocalDouble: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, slot: jint, value: jdouble) -> jvmtiError>,
1189    pub CreateRawMonitor: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, name: *const c_char, monitor_ptr: *mut jrawMonitorID) -> jvmtiError>,
1190    pub DestroyRawMonitor: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, monitor: jrawMonitorID) -> jvmtiError>,
1191    pub RawMonitorEnter: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, monitor: jrawMonitorID) -> jvmtiError>,
1192    pub RawMonitorExit: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, monitor: jrawMonitorID) -> jvmtiError>,
1193    pub RawMonitorWait: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, monitor: jrawMonitorID, millis: jlong) -> jvmtiError>,
1194    pub RawMonitorNotify: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, monitor: jrawMonitorID) -> jvmtiError>,
1195    pub RawMonitorNotifyAll: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, monitor: jrawMonitorID) -> jvmtiError>,
1196    pub SetBreakpoint: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, location: jlocation) -> jvmtiError>,
1197    pub ClearBreakpoint: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, location: jlocation) -> jvmtiError>,
1198    pub reserved40: *mut c_void,
1199    pub SetFieldAccessWatch: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field: jfieldID) -> jvmtiError>,
1200    pub ClearFieldAccessWatch: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field: jfieldID) -> jvmtiError>,
1201    pub SetFieldModificationWatch: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field: jfieldID) -> jvmtiError>,
1202    pub ClearFieldModificationWatch: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field: jfieldID) -> jvmtiError>,
1203    pub IsModifiableClass: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, is_modifiable_class_ptr: *mut jboolean) -> jvmtiError>,
1204    pub Allocate: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, size: jlong, mem_ptr: *mut *mut c_uchar) -> jvmtiError>,
1205    pub Deallocate: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, mem: *mut c_uchar) -> jvmtiError>,
1206    pub GetClassSignature: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, signature_ptr: *mut *mut c_char, generic_ptr: *mut *mut c_char) -> jvmtiError>,
1207    pub GetClassStatus: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, status_ptr: *mut jint) -> jvmtiError>,
1208    pub GetSourceFileName: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, source_name_ptr: *mut *mut c_char) -> jvmtiError>,
1209    pub GetClassModifiers: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, modifiers_ptr: *mut jint) -> jvmtiError>,
1210    pub GetClassMethods: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, method_count_ptr: *mut jint, methods_ptr: *mut *mut jmethodID) -> jvmtiError>,
1211    pub GetClassFields: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field_count_ptr: *mut jint, fields_ptr: *mut *mut jfieldID) -> jvmtiError>,
1212    pub GetImplementedInterfaces: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, interface_count_ptr: *mut jint, interfaces_ptr: *mut *mut jclass) -> jvmtiError>,
1213    pub IsInterface: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, is_interface_ptr: *mut jboolean) -> jvmtiError>,
1214    pub IsArrayClass: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, is_array_class_ptr: *mut jboolean) -> jvmtiError>,
1215    pub GetClassLoader: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, classloader_ptr: *mut jobject) -> jvmtiError>,
1216    pub GetObjectHashCode: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, object: jobject, hash_code_ptr: *mut jint) -> jvmtiError>,
1217    pub GetObjectMonitorUsage: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, object: jobject, info_ptr: *mut jvmtiMonitorUsage) -> jvmtiError>,
1218    pub GetFieldName: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field: jfieldID, name_ptr: *mut *mut c_char, signature_ptr: *mut *mut c_char, generic_ptr: *mut *mut c_char) -> jvmtiError>,
1219    pub GetFieldDeclaringClass: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field: jfieldID, declaring_class_ptr: *mut jclass) -> jvmtiError>,
1220    pub GetFieldModifiers: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field: jfieldID, modifiers_ptr: *mut jint) -> jvmtiError>,
1221    pub IsFieldSynthetic: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, field: jfieldID, is_synthetic_ptr: *mut jboolean) -> jvmtiError>,
1222    pub GetMethodName: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, name_ptr: *mut *mut c_char, signature_ptr: *mut *mut c_char, generic_ptr: *mut *mut c_char) -> jvmtiError>,
1223    pub GetMethodDeclaringClass: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, declaring_class_ptr: *mut jclass) -> jvmtiError>,
1224    pub GetMethodModifiers: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, modifiers_ptr: *mut jint) -> jvmtiError>,
1225    pub reserved67: *mut c_void,
1226    pub GetMaxLocals: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, max_ptr: *mut jint) -> jvmtiError>,
1227    pub GetArgumentsSize: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, size_ptr: *mut jint) -> jvmtiError>,
1228    pub GetLineNumberTable: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, entry_count_ptr: *mut jint, table_ptr: *mut *mut jvmtiLineNumberEntry) -> jvmtiError>,
1229    pub GetMethodLocation: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, start_location_ptr: *mut jlocation, end_location_ptr: *mut jlocation) -> jvmtiError>,
1230    pub GetLocalVariableTable: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, entry_count_ptr: *mut jint, table_ptr: *mut *mut jvmtiLocalVariableEntry) -> jvmtiError>,
1231    pub SetNativeMethodPrefix: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, prefix: *const c_char) -> jvmtiError>,
1232    pub SetNativeMethodPrefixes: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, prefix_count: jint, prefixes: *mut *mut c_char) -> jvmtiError>,
1233    pub GetBytecodes: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, bytecode_count_ptr: *mut jint, bytecodes_ptr: *mut *mut c_uchar) -> jvmtiError>,
1234    pub IsMethodNative: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, is_native_ptr: *mut jboolean) -> jvmtiError>,
1235    pub IsMethodSynthetic: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, is_synthetic_ptr: *mut jboolean) -> jvmtiError>,
1236    pub GetLoadedClasses: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, class_count_ptr: *mut jint, classes_ptr: *mut *mut jclass) -> jvmtiError>,
1237    pub GetClassLoaderClasses: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, initiating_loader: jobject, class_count_ptr: *mut jint, classes_ptr: *mut *mut jclass) -> jvmtiError>,
1238    pub PopFrame: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread) -> jvmtiError>,
1239    pub ForceEarlyReturnObject: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, value: jobject) -> jvmtiError>,
1240    pub ForceEarlyReturnInt: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, value: jint) -> jvmtiError>,
1241    pub ForceEarlyReturnLong: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, value: jlong) -> jvmtiError>,
1242    pub ForceEarlyReturnFloat: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, value: jfloat) -> jvmtiError>,
1243    pub ForceEarlyReturnDouble: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, value: jdouble) -> jvmtiError>,
1244    pub ForceEarlyReturnVoid: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread) -> jvmtiError>,
1245    pub RedefineClasses: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, class_count: jint, class_definitions: *const jvmtiClassDefinition) -> jvmtiError>,
1246    pub GetVersionNumber: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, version_ptr: *mut jint) -> jvmtiError>,
1247    pub GetCapabilities: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, capabilities_ptr: *mut jvmtiCapabilities) -> jvmtiError>,
1248    pub GetSourceDebugExtension: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, source_debug_extension_ptr: *mut *mut c_char) -> jvmtiError>,
1249    pub IsMethodObsolete: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, method: jmethodID, is_obsolete_ptr: *mut jboolean) -> jvmtiError>,
1250    pub SuspendThreadList: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, request_count: jint, request_list: *const jthread, results: *mut jvmtiError) -> jvmtiError>,
1251    pub ResumeThreadList: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, request_count: jint, request_list: *const jthread, results: *mut jvmtiError) -> jvmtiError>,
1252    pub reserved94: *mut c_void,
1253    pub reserved95: *mut c_void,
1254    pub reserved96: *mut c_void,
1255    pub reserved97: *mut c_void,
1256    pub reserved98: *mut c_void,
1257    pub reserved99: *mut c_void,
1258    pub GetAllStackTraces: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, max_frame_count: jint, stack_info_ptr: *mut *mut jvmtiStackInfo, thread_count_ptr: *mut jint) -> jvmtiError>,
1259    pub GetThreadListStackTraces: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread_count: jint, thread_list: *const jthread, max_frame_count: jint, stack_info_ptr: *mut *mut jvmtiStackInfo) -> jvmtiError>,
1260    pub GetThreadLocalStorage: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, data_ptr: *mut *mut c_void) -> jvmtiError>,
1261    pub SetThreadLocalStorage: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, data: *const c_void) -> jvmtiError>,
1262    pub GetStackTrace: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, start_depth: jint, max_frame_count: jint, frame_buffer: *mut jvmtiFrameInfo, count_ptr: *mut jint) -> jvmtiError>,
1263    pub reserved105: *mut c_void,
1264    pub GetTag: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, object: jobject, tag_ptr: *mut jlong) -> jvmtiError>,
1265    pub SetTag: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, object: jobject, tag: jlong) -> jvmtiError>,
1266    pub ForceGarbageCollection: Option<unsafe extern "C" fn(env: *mut jvmtiEnv) -> jvmtiError>,
1267    pub IterateOverObjectsReachableFromObject: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, object: jobject, object_reference_callback: jvmtiObjectReferenceCallback, user_data: *const c_void) -> jvmtiError>,
1268    pub IterateOverReachableObjects: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, heap_root_callback: jvmtiHeapRootCallback, stack_ref_callback: jvmtiStackReferenceCallback, object_ref_callback: jvmtiObjectReferenceCallback, user_data: *const c_void) -> jvmtiError>,
1269    pub IterateOverHeap: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, object_filter: jvmtiHeapObjectFilter, heap_object_callback: jvmtiHeapObjectCallback, user_data: *const c_void) -> jvmtiError>,
1270    pub IterateOverInstancesOfClass: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, object_filter: jvmtiHeapObjectFilter, heap_object_callback: jvmtiHeapObjectCallback, user_data: *const c_void) -> jvmtiError>,
1271    pub reserved113: *mut c_void,
1272    pub GetObjectsWithTags: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, tag_count: jint, tags: *const jlong, count_ptr: *mut jint, object_result_ptr: *mut *mut jobject, tag_result_ptr: *mut *mut jlong) -> jvmtiError>,
1273    pub FollowReferences: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, heap_filter: jint, klass: jclass, initial_object: jobject, callbacks: *const jvmtiHeapCallbacks, user_data: *const c_void) -> jvmtiError>,
1274    pub IterateThroughHeap: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, heap_filter: jint, klass: jclass, callbacks: *const jvmtiHeapCallbacks, user_data: *const c_void) -> jvmtiError>,
1275    pub reserved117: *mut c_void,
1276    pub reserved118: *mut c_void,
1277    pub reserved119: *mut c_void,
1278    pub SetJNIFunctionTable: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, function_table: *const JNINativeInterface_) -> jvmtiError>,
1279    pub GetJNIFunctionTable: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, function_table: *mut *mut JNINativeInterface_) -> jvmtiError>,
1280    pub SetEventCallbacks: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, callbacks: *const jvmtiEventCallbacks, size_of_callbacks: jint) -> jvmtiError>,
1281    pub GenerateEvents: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, event_type: jvmtiEvent) -> jvmtiError>,
1282    pub GetExtensionFunctions: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, extension_count_ptr: *mut jint, extensions: *mut *mut jvmtiExtensionFunctionInfo) -> jvmtiError>,
1283    pub GetExtensionEvents: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, extension_count_ptr: *mut jint, extensions: *mut *mut jvmtiExtensionEventInfo) -> jvmtiError>,
1284    pub SetExtensionEventCallback: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, extension_event_index: jint, callback: jvmtiExtensionEvent) -> jvmtiError>,
1285    pub DisposeEnvironment: Option<unsafe extern "C" fn(env: *mut jvmtiEnv) -> jvmtiError>,
1286    pub GetErrorName: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, error: jvmtiError, name_ptr: *mut *mut c_char) -> jvmtiError>,
1287    pub GetJLocationFormat: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, format_ptr: *mut jvmtiJlocationFormat) -> jvmtiError>,
1288    pub GetSystemProperties: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, count_ptr: *mut jint, property_ptr: *mut *mut *mut c_char) -> jvmtiError>,
1289    pub GetSystemProperty: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, property: *const c_char, value_ptr: *mut *mut c_char) -> jvmtiError>,
1290    pub SetSystemProperty: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, property: *const c_char, value: *const c_char) -> jvmtiError>,
1291    pub GetPhase: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, phase_ptr: *mut jvmtiPhase) -> jvmtiError>,
1292    pub GetCurrentThreadCpuTimerInfo: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, info_ptr: *mut jvmtiTimerInfo) -> jvmtiError>,
1293    pub GetCurrentThreadCpuTime: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, nanos_ptr: *mut jlong) -> jvmtiError>,
1294    pub GetThreadCpuTimerInfo: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, info_ptr: *mut jvmtiTimerInfo) -> jvmtiError>,
1295    pub GetThreadCpuTime: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, nanos_ptr: *mut jlong) -> jvmtiError>,
1296    pub GetTimerInfo: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, info_ptr: *mut jvmtiTimerInfo) -> jvmtiError>,
1297    pub GetTime: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, nanos_ptr: *mut jlong) -> jvmtiError>,
1298    pub GetPotentialCapabilities: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, capabilities_ptr: *mut jvmtiCapabilities) -> jvmtiError>,
1299    pub reserved141: *mut c_void,
1300    pub AddCapabilities: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, capabilities_ptr: *const jvmtiCapabilities) -> jvmtiError>,
1301    pub RelinquishCapabilities: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, capabilities_ptr: *const jvmtiCapabilities) -> jvmtiError>,
1302    pub GetAvailableProcessors: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, processor_count_ptr: *mut jint) -> jvmtiError>,
1303    pub GetClassVersionNumbers: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, minor_version_ptr: *mut jint, major_version_ptr: *mut jint) -> jvmtiError>,
1304    pub GetConstantPool: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, klass: jclass, constant_pool_count_ptr: *mut jint, constant_pool_byte_count_ptr: *mut jint, constant_pool_bytes_ptr: *mut *mut c_uchar) -> jvmtiError>,
1305    pub GetEnvironmentLocalStorage: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, data_ptr: *mut *mut c_void) -> jvmtiError>,
1306    pub SetEnvironmentLocalStorage: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, data: *const c_void) -> jvmtiError>,
1307    pub AddToBootstrapClassLoaderSearch: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, segment: *const c_char) -> jvmtiError>,
1308    pub SetVerboseFlag: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, flag: jvmtiVerboseFlag, value: jboolean) -> jvmtiError>,
1309    pub AddToSystemClassLoaderSearch: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, segment: *const c_char) -> jvmtiError>,
1310    pub RetransformClasses: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, class_count: jint, classes: *const jclass) -> jvmtiError>,
1311    pub GetOwnedMonitorStackDepthInfo: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, monitor_info_count_ptr: *mut jint, monitor_info_ptr: *mut *mut jvmtiMonitorStackDepthInfo) -> jvmtiError>,
1312    pub GetObjectSize: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, object: jobject, size_ptr: *mut jlong) -> jvmtiError>,
1313    pub GetLocalInstance: Option<unsafe extern "C" fn(env: *mut jvmtiEnv, thread: jthread, depth: jint, value_ptr: *mut jobject) -> jvmtiError>,
1314}
1315impl Clone for jvmtiInterface_1 {
1316    fn clone(&self) -> Self {
1317        *self
1318    }
1319}
1320impl Default for jvmtiInterface_1 {
1321    fn default() -> Self {
1322        unsafe { mem::zeroed() }
1323    }
1324}
1325
1326#[repr(C)]
1327#[derive(Copy)]
1328pub struct _jvmtiEnv {
1329    pub functions: *const jvmtiInterface_1,
1330}
1331impl Clone for _jvmtiEnv {
1332    fn clone(&self) -> Self {
1333        *self
1334    }
1335}
1336impl Default for _jvmtiEnv {
1337    fn default() -> Self {
1338        unsafe { mem::zeroed() }
1339    }
1340}
1341