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}