jvmti_rs/sys/
type.rs

1#![allow(non_snake_case, non_camel_case_types)]
2
3use jni_sys::*;
4use std::os::raw::c_char;
5use std::os::raw::c_uchar;
6use std::os::raw::c_void;
7use std::option::Option;
8
9use crate::sys::constant::{jvmtiError, jvmtiTimerKind, jvmtiParamKind, jvmtiParamTypes, jvmtiHeapReferenceKind, jvmtiPrimitiveType,
10                           jvmtiIterationControl, jvmtiHeapRootKind,
11                           jvmtiObjectReferenceKind};
12use crate::sys::jvmtienv::jvmtiEnv;
13use crate::sys::utils::BitfieldUnit;
14
15pub type jthread = jobject;
16pub type jthreadGroup = jobject;
17pub type jlocation = jlong;
18pub type jmemory = *mut c_uchar;
19pub type jniNativeInterface = JNINativeInterface_;
20
21pub type jvmtiCapabilities = _jvmtiCapabilities;
22pub type jvmtiEventCallbacks = _jvmtiEventCallbacks;
23pub type jrawMonitorID = *mut _jrawMonitorID;
24pub type jvmtiThreadInfo = _jvmtiThreadInfo;
25pub type jvmtiMonitorStackDepthInfo = _jvmtiMonitorStackDepthInfo;
26pub type jvmtiThreadGroupInfo = _jvmtiThreadGroupInfo;
27pub type jvmtiFrameInfo = _jvmtiFrameInfo;
28pub type jvmtiStackInfo = _jvmtiStackInfo;
29pub type jvmtiHeapReferenceInfoField = _jvmtiHeapReferenceInfoField;
30pub type jvmtiHeapReferenceInfoArray = _jvmtiHeapReferenceInfoArray;
31pub type jvmtiHeapReferenceInfoConstantPool = _jvmtiHeapReferenceInfoConstantPool;
32pub type jvmtiHeapReferenceInfoStackLocal = _jvmtiHeapReferenceInfoStackLocal;
33pub type jvmtiHeapReferenceInfoJniLocal = _jvmtiHeapReferenceInfoJniLocal;
34pub type jvmtiHeapReferenceInfoReserved = _jvmtiHeapReferenceInfoReserved;
35pub type jvmtiHeapReferenceInfo = _jvmtiHeapReferenceInfo;
36pub type jvmtiHeapCallbacks = _jvmtiHeapCallbacks;
37pub type jvmtiClassDefinition = _jvmtiClassDefinition;
38pub type jvmtiMonitorUsage = _jvmtiMonitorUsage;
39pub type jvmtiLineNumberEntry = _jvmtiLineNumberEntry;
40pub type jvmtiLocalVariableEntry = _jvmtiLocalVariableEntry;
41pub type jvmtiParamInfo = _jvmtiParamInfo;
42pub type jvmtiExtensionFunctionInfo = _jvmtiExtensionFunctionInfo;
43pub type jvmtiExtensionEventInfo = _jvmtiExtensionEventInfo;
44pub type jvmtiTimerInfo = _jvmtiTimerInfo;
45pub type jvmtiAddrLocationMap = _jvmtiAddrLocationMap;
46
47
48pub type jvmtiStartFunction = Option<
49    unsafe extern "C" fn(
50        jvmti_env: *mut jvmtiEnv,
51        jni_env: *mut JNIEnv,
52        arg: *mut c_void,
53    ),
54>;
55
56pub type jvmtiHeapIterationCallback = Option<
57    unsafe extern "C" fn(
58        class_tag: jlong,
59        size: jlong,
60        tag_ptr: *mut jlong,
61        length: jint,
62        user_data: *mut c_void,
63    ) -> jint,
64>;
65
66pub type jvmtiHeapReferenceCallback = Option<
67    unsafe extern "C" fn(
68        reference_kind: jvmtiHeapReferenceKind,
69        reference_info: *const jvmtiHeapReferenceInfo,
70        class_tag: jlong,
71        referrer_class_tag: jlong,
72        size: jlong,
73        tag_ptr: *mut jlong,
74        referrer_tag_ptr: *mut jlong,
75        length: jint,
76        user_data: *mut c_void,
77    ) -> jint,
78>;
79
80pub type jvmtiPrimitiveFieldCallback = Option<
81    unsafe extern "C" fn(
82        kind: jvmtiHeapReferenceKind,
83        info: *const jvmtiHeapReferenceInfo,
84        object_class_tag: jlong,
85        object_tag_ptr: *mut jlong,
86        value: jvalue,
87        value_type: jvmtiPrimitiveType,
88        user_data: *mut c_void,
89    ) -> jint,
90>;
91
92pub type jvmtiArrayPrimitiveValueCallback = Option<
93    unsafe extern "C" fn(
94        class_tag: jlong,
95        size: jlong,
96        tag_ptr: *mut jlong,
97        element_count: jint,
98        element_type: jvmtiPrimitiveType,
99        elements: *const c_void,
100        user_data: *mut c_void,
101    ) -> jint,
102>;
103
104pub type jvmtiStringPrimitiveValueCallback = Option<
105    unsafe extern "C" fn(
106        class_tag: jlong,
107        size: jlong,
108        tag_ptr: *mut jlong,
109        value: *const jchar,
110        value_length: jint,
111        user_data: *mut c_void,
112    ) -> jint,
113>;
114
115pub type jvmtiReservedCallback = Option<unsafe extern "C" fn() -> jint>;
116
117pub type jvmtiHeapObjectCallback = Option<
118    unsafe extern "C" fn(
119        class_tag: jlong,
120        size: jlong,
121        tag_ptr: *mut jlong,
122        user_data: *mut c_void,
123    ) -> jvmtiIterationControl,
124>;
125
126pub type jvmtiHeapRootCallback = Option<
127    unsafe extern "C" fn(
128        root_kind: jvmtiHeapRootKind,
129        class_tag: jlong,
130        size: jlong,
131        tag_ptr: *mut jlong,
132        user_data: *mut c_void,
133    ) -> jvmtiIterationControl,
134>;
135
136pub type jvmtiStackReferenceCallback = Option<
137    unsafe extern "C" fn(
138        root_kind: jvmtiHeapRootKind,
139        class_tag: jlong,
140        size: jlong,
141        tag_ptr: *mut jlong,
142        thread_tag: jlong,
143        depth: jint,
144        method: jmethodID,
145        slot: jint,
146        user_data: *mut c_void,
147    ) -> jvmtiIterationControl,
148>;
149
150pub type jvmtiObjectReferenceCallback = Option<
151    unsafe extern "C" fn(
152        reference_kind: jvmtiObjectReferenceKind,
153        class_tag: jlong,
154        size: jlong,
155        tag_ptr: *mut jlong,
156        referrer_tag: jlong,
157        referrer_index: jint,
158        user_data: *mut c_void,
159    ) -> jvmtiIterationControl,
160>;
161
162pub type jvmtiExtensionFunction = Option<
163    unsafe extern "C" fn(
164        jvmti_env: *mut jvmtiEnv,
165        ...
166    ) -> jvmtiError
167>;
168
169pub type jvmtiExtensionEvent = Option<
170    unsafe extern "C" fn(
171        jvmti_env: *mut jvmtiEnv,
172        ...)
173>;
174
175pub type jvmtiEventReserved = Option<unsafe extern "C" fn()>;
176
177pub type jvmtiEventBreakpoint = Option<
178    unsafe extern "C" fn(
179        jvmti_env: *mut jvmtiEnv,
180        jni_env: *mut JNIEnv,
181        thread: jthread,
182        method: jmethodID,
183        location: jlocation,
184    ),
185>;
186
187pub type jvmtiEventClassFileLoadHook = Option<
188    unsafe extern "C" fn(
189        jvmti_env: *mut jvmtiEnv,
190        jni_env: *mut JNIEnv,
191        class_being_redefined: jclass,
192        loader: jobject,
193        name: *const c_char,
194        protection_domain: jobject,
195        class_data_len: jint,
196        class_data: *const c_uchar,
197        new_class_data_len: *mut jint,
198        new_class_data: *mut *mut c_uchar,
199    ),
200>;
201
202pub type jvmtiEventClassLoad = Option<
203    unsafe extern "C" fn(
204        jvmti_env: *mut jvmtiEnv,
205        jni_env: *mut JNIEnv,
206        thread: jthread,
207        klass: jclass,
208    ),
209>;
210
211pub type jvmtiEventClassPrepare = Option<
212    unsafe extern "C" fn(
213        jvmti_env: *mut jvmtiEnv,
214        jni_env: *mut JNIEnv,
215        thread: jthread,
216        klass: jclass,
217    ),
218>;
219
220pub type jvmtiEventCompiledMethodLoad = Option<
221    unsafe extern "C" fn(
222        jvmti_env: *mut jvmtiEnv,
223        method: jmethodID,
224        code_size: jint,
225        code_addr: *const c_void,
226        map_length: jint,
227        map: *const jvmtiAddrLocationMap,
228        compile_info: *const c_void,
229    ),
230>;
231
232pub type jvmtiEventCompiledMethodUnload = Option<
233    unsafe extern "C" fn(
234        jvmti_env: *mut jvmtiEnv,
235        method: jmethodID,
236        code_addr: *const c_void,
237    ),
238>;
239
240pub type jvmtiEventDataDumpRequest = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv)>;
241
242pub type jvmtiEventDynamicCodeGenerated = Option<
243    unsafe extern "C" fn(
244        jvmti_env: *mut jvmtiEnv,
245        name: *const c_char,
246        address: *const c_void,
247        length: jint,
248    ),
249>;
250
251pub type jvmtiEventException = Option<
252    unsafe extern "C" fn(
253        jvmti_env: *mut jvmtiEnv,
254        jni_env: *mut JNIEnv,
255        thread: jthread,
256        method: jmethodID,
257        location: jlocation,
258        exception: jobject,
259        catch_method: jmethodID,
260        catch_location: jlocation,
261    ),
262>;
263
264pub type jvmtiEventExceptionCatch = Option<
265    unsafe extern "C" fn(
266        jvmti_env: *mut jvmtiEnv,
267        jni_env: *mut JNIEnv,
268        thread: jthread,
269        method: jmethodID,
270        location: jlocation,
271        exception: jobject,
272    ),
273>;
274
275pub type jvmtiEventFieldAccess = Option<
276    unsafe extern "C" fn(
277        jvmti_env: *mut jvmtiEnv,
278        jni_env: *mut JNIEnv,
279        thread: jthread,
280        method: jmethodID,
281        location: jlocation,
282        field_klass: jclass,
283        object: jobject,
284        field: jfieldID,
285    ),
286>;
287
288pub type jvmtiEventFieldModification = Option<
289    unsafe extern "C" fn(
290        jvmti_env: *mut jvmtiEnv,
291        jni_env: *mut JNIEnv,
292        thread: jthread,
293        method: jmethodID,
294        location: jlocation,
295        field_klass: jclass,
296        object: jobject,
297        field: jfieldID,
298        signature_type: c_char,
299        new_value: jvalue,
300    ),
301>;
302
303pub type jvmtiEventFramePop = Option<
304    unsafe extern "C" fn(
305        jvmti_env: *mut jvmtiEnv,
306        jni_env: *mut JNIEnv,
307        thread: jthread,
308        method: jmethodID,
309        was_popped_by_exception: jboolean,
310    ),
311>;
312
313pub type jvmtiEventGarbageCollectionFinish = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv)>;
314
315pub type jvmtiEventGarbageCollectionStart = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv)>;
316
317pub type jvmtiEventMethodEntry = Option<
318    unsafe extern "C" fn(
319        jvmti_env: *mut jvmtiEnv,
320        jni_env: *mut JNIEnv,
321        thread: jthread,
322        method: jmethodID,
323    ),
324>;
325
326pub type jvmtiEventMethodExit = Option<
327    unsafe extern "C" fn(
328        jvmti_env: *mut jvmtiEnv,
329        jni_env: *mut JNIEnv,
330        thread: jthread,
331        method: jmethodID,
332        was_popped_by_exception: jboolean,
333        return_value: jvalue,
334    ),
335>;
336
337pub type jvmtiEventMonitorContendedEnter = Option<
338    unsafe extern "C" fn(
339        jvmti_env: *mut jvmtiEnv,
340        jni_env: *mut JNIEnv,
341        thread: jthread,
342        object: jobject,
343    ),
344>;
345
346pub type jvmtiEventMonitorContendedEntered = Option<
347    unsafe extern "C" fn(
348        jvmti_env: *mut jvmtiEnv,
349        jni_env: *mut JNIEnv,
350        thread: jthread,
351        object: jobject,
352    ),
353>;
354
355pub type jvmtiEventMonitorWait = Option<
356    unsafe extern "C" fn(
357        jvmti_env: *mut jvmtiEnv,
358        jni_env: *mut JNIEnv,
359        thread: jthread,
360        object: jobject,
361        timeout: jlong,
362    ),
363>;
364
365pub type jvmtiEventMonitorWaited = Option<
366    unsafe extern "C" fn(
367        jvmti_env: *mut jvmtiEnv,
368        jni_env: *mut JNIEnv,
369        thread: jthread,
370        object: jobject,
371        timed_out: jboolean,
372    ),
373>;
374
375pub type jvmtiEventNativeMethodBind = Option<
376    unsafe extern "C" fn(
377        jvmti_env: *mut jvmtiEnv,
378        jni_env: *mut JNIEnv,
379        thread: jthread,
380        method: jmethodID,
381        address: *mut c_void,
382        new_address_ptr: *mut *mut c_void,
383    ),
384>;
385
386pub type jvmtiEventObjectFree = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, tag: jlong)>;
387
388pub type jvmtiEventResourceExhausted = Option<
389    unsafe extern "C" fn(
390        jvmti_env: *mut jvmtiEnv,
391        jni_env: *mut JNIEnv,
392        flags: jint,
393        reserved: *const c_void,
394        description: *const c_char,
395    ),
396>;
397
398pub type jvmtiEventSingleStep = Option<
399    unsafe extern "C" fn(
400        jvmti_env: *mut jvmtiEnv,
401        jni_env: *mut JNIEnv,
402        thread: jthread,
403        method: jmethodID,
404        location: jlocation,
405    ),
406>;
407
408pub type jvmtiEventThreadEnd = Option<
409    unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, jni_env: *mut JNIEnv, thread: jthread),
410>;
411
412pub type jvmtiEventThreadStart = Option<
413    unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, jni_env: *mut JNIEnv, thread: jthread),
414>;
415
416pub type jvmtiEventVMDeath = Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, jni_env: *mut JNIEnv)>;
417
418pub type jvmtiEventVMInit = Option<
419    unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, jni_env: *mut JNIEnv, thread: jthread),
420>;
421
422pub type jvmtiEventVMObjectAlloc = Option<
423    unsafe extern "C" fn(
424        jvmti_env: *mut jvmtiEnv,
425        jni_env: *mut JNIEnv,
426        thread: jthread,
427        object: jobject,
428        object_klass: jclass,
429        size: jlong,
430    ),
431>;
432
433pub type jvmtiEventVMStart =
434Option<unsafe extern "C" fn(jvmti_env: *mut jvmtiEnv, jni_env: *mut JNIEnv)>;
435
436
437#[repr(C)]
438#[repr(align(4))]
439#[derive(Debug, Copy, Clone)]
440pub struct _jvmtiCapabilities {
441    pub _bitfield_1: BitfieldUnit<[u8; 16usize], u8>,
442}
443
444#[repr(C)]
445#[derive(Debug, Copy, Clone)]
446pub struct _jvmtiEventCallbacks {
447    pub VMInit: jvmtiEventVMInit,
448    pub VMDeath: jvmtiEventVMDeath,
449    pub ThreadStart: jvmtiEventThreadStart,
450    pub ThreadEnd: jvmtiEventThreadEnd,
451    pub ClassFileLoadHook: jvmtiEventClassFileLoadHook,
452    pub ClassLoad: jvmtiEventClassLoad,
453    pub ClassPrepare: jvmtiEventClassPrepare,
454    pub VMStart: jvmtiEventVMStart,
455    pub Exception: jvmtiEventException,
456    pub ExceptionCatch: jvmtiEventExceptionCatch,
457    pub SingleStep: jvmtiEventSingleStep,
458    pub FramePop: jvmtiEventFramePop,
459    pub Breakpoint: jvmtiEventBreakpoint,
460    pub FieldAccess: jvmtiEventFieldAccess,
461    pub FieldModification: jvmtiEventFieldModification,
462    pub MethodEntry: jvmtiEventMethodEntry,
463    pub MethodExit: jvmtiEventMethodExit,
464    pub NativeMethodBind: jvmtiEventNativeMethodBind,
465    pub CompiledMethodLoad: jvmtiEventCompiledMethodLoad,
466    pub CompiledMethodUnload: jvmtiEventCompiledMethodUnload,
467    pub DynamicCodeGenerated: jvmtiEventDynamicCodeGenerated,
468    pub DataDumpRequest: jvmtiEventDataDumpRequest,
469    pub reserved72: jvmtiEventReserved,
470    pub MonitorWait: jvmtiEventMonitorWait,
471    pub MonitorWaited: jvmtiEventMonitorWaited,
472    pub MonitorContendedEnter: jvmtiEventMonitorContendedEnter,
473    pub MonitorContendedEntered: jvmtiEventMonitorContendedEntered,
474    pub reserved77: jvmtiEventReserved,
475    pub reserved78: jvmtiEventReserved,
476    pub reserved79: jvmtiEventReserved,
477    pub ResourceExhausted: jvmtiEventResourceExhausted,
478    pub GarbageCollectionStart: jvmtiEventGarbageCollectionStart,
479    pub GarbageCollectionFinish: jvmtiEventGarbageCollectionFinish,
480    pub ObjectFree: jvmtiEventObjectFree,
481    pub VMObjectAlloc: jvmtiEventVMObjectAlloc,
482}
483
484#[repr(C)]
485#[derive(Debug, Copy, Clone)]
486pub struct _jrawMonitorID {
487    _unused: [u8; 0],
488}
489
490#[repr(C)]
491#[derive(Debug, Copy, Clone)]
492pub struct _jvmtiThreadInfo {
493    pub name: *mut c_char,
494    pub priority: jint,
495    pub is_daemon: jboolean,
496    pub thread_group: jthreadGroup,
497    pub context_class_loader: jobject,
498}
499
500#[repr(C)]
501#[derive(Debug, Copy, Clone)]
502pub struct _jvmtiMonitorStackDepthInfo {
503    pub monitor: jobject,
504    pub stack_depth: jint,
505}
506
507#[repr(C)]
508#[derive(Debug, Copy, Clone)]
509pub struct _jvmtiThreadGroupInfo {
510    pub parent: jthreadGroup,
511    pub name: *mut c_char,
512    pub max_priority: jint,
513    pub is_daemon: jboolean,
514}
515
516#[repr(C)]
517#[derive(Debug, Copy, Clone)]
518pub struct _jvmtiFrameInfo {
519    pub method: jmethodID,
520    pub location: jlocation,
521}
522
523#[repr(C)]
524#[derive(Debug, Copy, Clone)]
525pub struct _jvmtiStackInfo {
526    pub thread: jthread,
527    pub state: jint,
528    pub frame_buffer: *mut jvmtiFrameInfo,
529    pub frame_count: jint,
530}
531
532#[repr(C)]
533#[derive(Debug, Copy, Clone)]
534pub struct _jvmtiHeapReferenceInfoField {
535    pub index: jint,
536}
537
538#[repr(C)]
539#[derive(Debug, Copy, Clone)]
540pub struct _jvmtiHeapReferenceInfoArray {
541    pub index: jint,
542}
543
544#[repr(C)]
545#[derive(Debug, Copy, Clone)]
546pub struct _jvmtiHeapReferenceInfoConstantPool {
547    pub index: jint,
548}
549
550#[repr(C)]
551#[derive(Debug, Copy, Clone)]
552pub struct _jvmtiHeapReferenceInfoStackLocal {
553    pub thread_tag: jlong,
554    pub thread_id: jlong,
555    pub depth: jint,
556    pub method: jmethodID,
557    pub location: jlocation,
558    pub slot: jint,
559}
560
561#[repr(C)]
562#[derive(Debug, Copy, Clone)]
563pub struct _jvmtiHeapReferenceInfoJniLocal {
564    pub thread_tag: jlong,
565    pub thread_id: jlong,
566    pub depth: jint,
567    pub method: jmethodID,
568}
569
570#[repr(C)]
571#[derive(Debug, Copy, Clone)]
572pub struct _jvmtiHeapReferenceInfoReserved {
573    pub reserved1: jlong,
574    pub reserved2: jlong,
575    pub reserved3: jlong,
576    pub reserved4: jlong,
577    pub reserved5: jlong,
578    pub reserved6: jlong,
579    pub reserved7: jlong,
580    pub reserved8: jlong,
581}
582
583#[repr(C)]
584#[derive(Copy, Clone)]
585pub union _jvmtiHeapReferenceInfo {
586    pub field: jvmtiHeapReferenceInfoField,
587    pub array: jvmtiHeapReferenceInfoArray,
588    pub constant_pool: jvmtiHeapReferenceInfoConstantPool,
589    pub stack_local: jvmtiHeapReferenceInfoStackLocal,
590    pub jni_local: jvmtiHeapReferenceInfoJniLocal,
591    pub other: jvmtiHeapReferenceInfoReserved,
592}
593
594#[repr(C)]
595#[derive(Debug, Copy, Clone)]
596pub struct _jvmtiHeapCallbacks {
597    pub heap_iteration_callback: jvmtiHeapIterationCallback,
598    pub heap_reference_callback: jvmtiHeapReferenceCallback,
599    pub primitive_field_callback: jvmtiPrimitiveFieldCallback,
600    pub array_primitive_value_callback: jvmtiArrayPrimitiveValueCallback,
601    pub string_primitive_value_callback: jvmtiStringPrimitiveValueCallback,
602    pub reserved5: jvmtiReservedCallback,
603    pub reserved6: jvmtiReservedCallback,
604    pub reserved7: jvmtiReservedCallback,
605    pub reserved8: jvmtiReservedCallback,
606    pub reserved9: jvmtiReservedCallback,
607    pub reserved10: jvmtiReservedCallback,
608    pub reserved11: jvmtiReservedCallback,
609    pub reserved12: jvmtiReservedCallback,
610    pub reserved13: jvmtiReservedCallback,
611    pub reserved14: jvmtiReservedCallback,
612    pub reserved15: jvmtiReservedCallback,
613}
614
615#[repr(C)]
616#[derive(Debug, Copy, Clone)]
617pub struct _jvmtiClassDefinition {
618    pub klass: jclass,
619    pub class_byte_count: jint,
620    pub class_bytes: *const c_uchar,
621}
622
623#[repr(C)]
624#[derive(Debug, Copy, Clone)]
625pub struct _jvmtiMonitorUsage {
626    pub owner: jthread,
627    pub entry_count: jint,
628    pub waiter_count: jint,
629    pub waiters: *mut jthread,
630    pub notify_waiter_count: jint,
631    pub notify_waiters: *mut jthread,
632}
633
634#[repr(C)]
635#[derive(Debug, Copy, Clone)]
636pub struct _jvmtiLineNumberEntry {
637    pub start_location: jlocation,
638    pub line_number: jint,
639}
640
641#[repr(C)]
642#[derive(Debug, Copy, Clone)]
643pub struct _jvmtiLocalVariableEntry {
644    pub start_location: jlocation,
645    pub length: jint,
646    pub name: *mut c_char,
647    pub signature: *mut c_char,
648    pub generic_signature: *mut c_char,
649    pub slot: jint,
650}
651
652#[repr(C)]
653#[derive(Debug, Copy, Clone)]
654pub struct _jvmtiParamInfo {
655    pub name: *mut c_char,
656    pub kind: jvmtiParamKind,
657    pub base_type: jvmtiParamTypes,
658    pub null_ok: jboolean,
659}
660
661#[repr(C)]
662#[derive(Debug, Copy, Clone)]
663pub struct _jvmtiExtensionFunctionInfo {
664    pub func: jvmtiExtensionFunction,
665    pub id: *mut c_char,
666    pub short_description: *mut c_char,
667    pub param_count: jint,
668    pub params: *mut jvmtiParamInfo,
669    pub error_count: jint,
670    pub errors: *mut jvmtiError,
671}
672
673#[repr(C)]
674#[derive(Debug, Copy, Clone)]
675pub struct _jvmtiExtensionEventInfo {
676    pub extension_event_index: jint,
677    pub id: *mut c_char,
678    pub short_description: *mut c_char,
679    pub param_count: jint,
680    pub params: *mut jvmtiParamInfo,
681}
682
683#[repr(C)]
684#[derive(Debug, Copy, Clone)]
685pub struct _jvmtiTimerInfo {
686    pub max_value: jlong,
687    pub may_skip_forward: jboolean,
688    pub may_skip_backward: jboolean,
689    pub kind: jvmtiTimerKind,
690    pub reserved1: jlong,
691    pub reserved2: jlong,
692}
693
694#[repr(C)]
695#[derive(Debug, Copy, Clone)]
696pub struct _jvmtiAddrLocationMap {
697    pub start_address: *const c_void,
698    pub location: jlocation,
699}