Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. #ifdef USE_PRAGMA_IDENT_HDR
  2. #pragma ident "@(#)jvmtiLib.xsl 1.32 04/06/01 20:19:53 JVM"
  3. #endif
  4. /*
  5.  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
  6.  * SUN PROPRIETARY/CONFIDENTIAL.  Use is subject to license terms.
  7.  */
  8.  
  9.     /* AUTOMATICALLY GENERATED FILE - DO NOT EDIT */
  10.  
  11.  
  12.     /* Include file for the Java(tm) Virtual Machine Tool Interface */
  13.  
  14. #ifndef _JAVA_JVMTI_H_
  15. #define _JAVA_JVMTI_H_
  16.  
  17. #include "jni.h"
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. enum {
  24.     JVMTI_VERSION_1   = 0x30010000,
  25.     JVMTI_VERSION_1_0 = 0x30010000,
  26.  
  27.     JVMTI_VERSION = 0x30000000 + (1 * 0x10000) + (0 * 0x100) + 33  /* version: 1.0.33 */
  28. };
  29.  
  30. JNIEXPORT jint JNICALL
  31. Agent_OnLoad(JavaVM *vm, char *options, void *reserved);
  32.  
  33. JNIEXPORT void JNICALL
  34. Agent_OnUnload(JavaVM *vm);
  35.  
  36.     /* Forward declaration of the environment */
  37.        
  38. struct _jvmtiEnv;
  39.  
  40. struct jvmtiInterface_1_;
  41.  
  42. #ifdef __cplusplus
  43. typedef _jvmtiEnv jvmtiEnv;
  44. #else
  45. typedef const struct jvmtiInterface_1_ *jvmtiEnv;
  46. #endif /* __cplusplus */
  47.  
  48. /* Derived Base Types */
  49.  
  50. typedef jobject jthread;
  51. typedef jobject jthreadGroup;
  52. typedef jlong jlocation;
  53. struct _jrawMonitorID;
  54. typedef struct _jrawMonitorID *jrawMonitorID;
  55. typedef struct JNINativeInterface_ jniNativeInterface;
  56.  
  57.     /* Constants */
  58.  
  59.  
  60.     /* Thread State Flags */
  61.  
  62. enum {
  63.     JVMTI_THREAD_STATE_ALIVE = 0x0001,
  64.     JVMTI_THREAD_STATE_TERMINATED = 0x0002,
  65.     JVMTI_THREAD_STATE_RUNNABLE = 0x0004,
  66.     JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER = 0x0400,
  67.     JVMTI_THREAD_STATE_WAITING = 0x0080,
  68.     JVMTI_THREAD_STATE_WAITING_INDEFINITELY = 0x0010,
  69.     JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT = 0x0020,
  70.     JVMTI_THREAD_STATE_SLEEPING = 0x0040,
  71.     JVMTI_THREAD_STATE_IN_OBJECT_WAIT = 0x0100,
  72.     JVMTI_THREAD_STATE_PARKED = 0x0200,
  73.     JVMTI_THREAD_STATE_SUSPENDED = 0x100000,
  74.     JVMTI_THREAD_STATE_INTERRUPTED = 0x200000,
  75.     JVMTI_THREAD_STATE_IN_NATIVE = 0x400000,
  76.     JVMTI_THREAD_STATE_VENDOR_1 = 0x10000000,
  77.     JVMTI_THREAD_STATE_VENDOR_2 = 0x20000000,
  78.     JVMTI_THREAD_STATE_VENDOR_3 = 0x40000000
  79. };
  80.  
  81.     /* java.lang.Thread.State Conversion Masks */
  82.  
  83. enum {
  84.     JVMTI_JAVA_LANG_THREAD_STATE_MASK = JVMTI_THREAD_STATE_TERMINATED | JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT,
  85.     JVMTI_JAVA_LANG_THREAD_STATE_NEW = 0,
  86.     JVMTI_JAVA_LANG_THREAD_STATE_TERMINATED = JVMTI_THREAD_STATE_TERMINATED,
  87.     JVMTI_JAVA_LANG_THREAD_STATE_RUNNABLE = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE,
  88.     JVMTI_JAVA_LANG_THREAD_STATE_BLOCKED = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER,
  89.     JVMTI_JAVA_LANG_THREAD_STATE_WAITING = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY,
  90.     JVMTI_JAVA_LANG_THREAD_STATE_TIMED_WAITING = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT
  91. };
  92.  
  93.     /* Thread Priority Constants */
  94.  
  95. enum {
  96.     JVMTI_THREAD_MIN_PRIORITY = 1,
  97.     JVMTI_THREAD_NORM_PRIORITY = 5,
  98.     JVMTI_THREAD_MAX_PRIORITY = 10
  99. };
  100.  
  101.     /* Heap Object Filter Enumeration */
  102.  
  103. typedef enum {
  104.     JVMTI_HEAP_OBJECT_TAGGED = 1,
  105.     JVMTI_HEAP_OBJECT_UNTAGGED = 2,
  106.     JVMTI_HEAP_OBJECT_EITHER = 3
  107. } jvmtiHeapObjectFilter;
  108.  
  109.     /* Heap Root Kind Enumeration */
  110.  
  111. typedef enum {
  112.     JVMTI_HEAP_ROOT_JNI_GLOBAL = 1,
  113.     JVMTI_HEAP_ROOT_SYSTEM_CLASS = 2,
  114.     JVMTI_HEAP_ROOT_MONITOR = 3,
  115.     JVMTI_HEAP_ROOT_STACK_LOCAL = 4,
  116.     JVMTI_HEAP_ROOT_JNI_LOCAL = 5,
  117.     JVMTI_HEAP_ROOT_THREAD = 6,
  118.     JVMTI_HEAP_ROOT_OTHER = 7
  119. } jvmtiHeapRootKind;
  120.  
  121.     /* Object Reference Enumeration */
  122.  
  123. typedef enum {
  124.     JVMTI_REFERENCE_CLASS = 1,
  125.     JVMTI_REFERENCE_FIELD = 2,
  126.     JVMTI_REFERENCE_ARRAY_ELEMENT = 3,
  127.     JVMTI_REFERENCE_CLASS_LOADER = 4,
  128.     JVMTI_REFERENCE_SIGNERS = 5,
  129.     JVMTI_REFERENCE_PROTECTION_DOMAIN = 6,
  130.     JVMTI_REFERENCE_INTERFACE = 7,
  131.     JVMTI_REFERENCE_STATIC_FIELD = 8,
  132.     JVMTI_REFERENCE_CONSTANT_POOL = 9
  133. } jvmtiObjectReferenceKind;
  134.  
  135.     /* Iteration Control Enumeration */
  136.  
  137. typedef enum {
  138.     JVMTI_ITERATION_CONTINUE = 1,
  139.     JVMTI_ITERATION_IGNORE = 2,
  140.     JVMTI_ITERATION_ABORT = 0
  141. } jvmtiIterationControl;
  142.  
  143.     /* Class Status Flags */
  144.  
  145. enum {
  146.     JVMTI_CLASS_STATUS_VERIFIED = 1,
  147.     JVMTI_CLASS_STATUS_PREPARED = 2,
  148.     JVMTI_CLASS_STATUS_INITIALIZED = 4,
  149.     JVMTI_CLASS_STATUS_ERROR = 8,
  150.     JVMTI_CLASS_STATUS_ARRAY = 16,
  151.     JVMTI_CLASS_STATUS_PRIMITIVE = 32
  152. };
  153.  
  154.     /* Event Enable/Disable */
  155.  
  156. typedef enum {
  157.     JVMTI_ENABLE = 1,
  158.     JVMTI_DISABLE = 0
  159. } jvmtiEventMode;
  160.  
  161.     /* Extension Function/Event Parameter Types */
  162.  
  163. typedef enum {
  164.     JVMTI_TYPE_JBYTE = 101,
  165.     JVMTI_TYPE_JCHAR = 102,
  166.     JVMTI_TYPE_JSHORT = 103,
  167.     JVMTI_TYPE_JINT = 104,
  168.     JVMTI_TYPE_JLONG = 105,
  169.     JVMTI_TYPE_JFLOAT = 106,
  170.     JVMTI_TYPE_JDOUBLE = 107,
  171.     JVMTI_TYPE_JBOOLEAN = 108,
  172.     JVMTI_TYPE_JOBJECT = 109,
  173.     JVMTI_TYPE_JTHREAD = 110,
  174.     JVMTI_TYPE_JCLASS = 111,
  175.     JVMTI_TYPE_JVALUE = 112,
  176.     JVMTI_TYPE_JFIELDID = 113,
  177.     JVMTI_TYPE_JMETHODID = 114,
  178.     JVMTI_TYPE_CCHAR = 115,
  179.     JVMTI_TYPE_CVOID = 116,
  180.     JVMTI_TYPE_JNIENV = 117
  181. } jvmtiParamTypes;
  182.  
  183.     /* Extension Function/Event Parameter Kinds */
  184.  
  185. typedef enum {
  186.     JVMTI_KIND_IN = 91,
  187.     JVMTI_KIND_IN_PTR = 92,
  188.     JVMTI_KIND_IN_BUF = 93,
  189.     JVMTI_KIND_ALLOC_BUF = 94,
  190.     JVMTI_KIND_ALLOC_ALLOC_BUF = 95,
  191.     JVMTI_KIND_OUT = 96,
  192.     JVMTI_KIND_OUT_BUF = 97
  193. } jvmtiParamKind;
  194.  
  195.     /* Timer Kinds */
  196.  
  197. typedef enum {
  198.     JVMTI_TIMER_USER_CPU = 30,
  199.     JVMTI_TIMER_TOTAL_CPU = 31,
  200.     JVMTI_TIMER_ELAPSED = 32
  201. } jvmtiTimerKind;
  202.  
  203.     /* Phases of execution */
  204.  
  205. typedef enum {
  206.     JVMTI_PHASE_ONLOAD = 1,
  207.     JVMTI_PHASE_PRIMORDIAL = 2,
  208.     JVMTI_PHASE_START = 6,
  209.     JVMTI_PHASE_LIVE = 4,
  210.     JVMTI_PHASE_DEAD = 8
  211. } jvmtiPhase;
  212.  
  213.     /* Version Interface Types */
  214.  
  215. enum {
  216.     JVMTI_VERSION_INTERFACE_JNI = 0x00000000,
  217.     JVMTI_VERSION_INTERFACE_JVMTI = 0x30000000
  218. };
  219.  
  220.     /* Version Masks */
  221.  
  222. enum {
  223.     JVMTI_VERSION_MASK_INTERFACE_TYPE = 0x70000000,
  224.     JVMTI_VERSION_MASK_MAJOR = 0x0FFF0000,
  225.     JVMTI_VERSION_MASK_MINOR = 0x0000FF00,
  226.     JVMTI_VERSION_MASK_MICRO = 0x000000FF
  227. };
  228.  
  229.     /* Version Shifts */
  230.  
  231. enum {
  232.     JVMTI_VERSION_SHIFT_MAJOR = 16,
  233.     JVMTI_VERSION_SHIFT_MINOR = 8,
  234.     JVMTI_VERSION_SHIFT_MICRO = 0
  235. };
  236.  
  237.     /* Verbose Flag Enumeration */
  238.  
  239. typedef enum {
  240.     JVMTI_VERBOSE_OTHER = 0,
  241.     JVMTI_VERBOSE_GC = 1,
  242.     JVMTI_VERBOSE_CLASS = 2,
  243.     JVMTI_VERBOSE_JNI = 4
  244. } jvmtiVerboseFlag;
  245.  
  246.     /* JLocation Format Enumeration */
  247.  
  248. typedef enum {
  249.     JVMTI_JLOCATION_JVMBCI = 1,
  250.     JVMTI_JLOCATION_MACHINEPC = 2,
  251.     JVMTI_JLOCATION_OTHER = 0
  252. } jvmtiJlocationFormat;
  253.  
  254.     /* Errors */
  255.  
  256. typedef enum {
  257.     JVMTI_ERROR_NONE = 0,
  258.     JVMTI_ERROR_INVALID_THREAD = 10,
  259.     JVMTI_ERROR_INVALID_THREAD_GROUP = 11,
  260.     JVMTI_ERROR_INVALID_PRIORITY = 12,
  261.     JVMTI_ERROR_THREAD_NOT_SUSPENDED = 13,
  262.     JVMTI_ERROR_THREAD_SUSPENDED = 14,
  263.     JVMTI_ERROR_THREAD_NOT_ALIVE = 15,
  264.     JVMTI_ERROR_INVALID_OBJECT = 20,
  265.     JVMTI_ERROR_INVALID_CLASS = 21,
  266.     JVMTI_ERROR_CLASS_NOT_PREPARED = 22,
  267.     JVMTI_ERROR_INVALID_METHODID = 23,
  268.     JVMTI_ERROR_INVALID_LOCATION = 24,
  269.     JVMTI_ERROR_INVALID_FIELDID = 25,
  270.     JVMTI_ERROR_NO_MORE_FRAMES = 31,
  271.     JVMTI_ERROR_OPAQUE_FRAME = 32,
  272.     JVMTI_ERROR_TYPE_MISMATCH = 34,
  273.     JVMTI_ERROR_INVALID_SLOT = 35,
  274.     JVMTI_ERROR_DUPLICATE = 40,
  275.     JVMTI_ERROR_NOT_FOUND = 41,
  276.     JVMTI_ERROR_INVALID_MONITOR = 50,
  277.     JVMTI_ERROR_NOT_MONITOR_OWNER = 51,
  278.     JVMTI_ERROR_INTERRUPT = 52,
  279.     JVMTI_ERROR_INVALID_CLASS_FORMAT = 60,
  280.     JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION = 61,
  281.     JVMTI_ERROR_FAILS_VERIFICATION = 62,
  282.     JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED = 63,
  283.     JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED = 64,
  284.     JVMTI_ERROR_INVALID_TYPESTATE = 65,
  285.     JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED = 66,
  286.     JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED = 67,
  287.     JVMTI_ERROR_UNSUPPORTED_VERSION = 68,
  288.     JVMTI_ERROR_NAMES_DONT_MATCH = 69,
  289.     JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED = 70,
  290.     JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED = 71,
  291.     JVMTI_ERROR_UNMODIFIABLE_CLASS = 79,
  292.     JVMTI_ERROR_NOT_AVAILABLE = 98,
  293.     JVMTI_ERROR_MUST_POSSESS_CAPABILITY = 99,
  294.     JVMTI_ERROR_NULL_POINTER = 100,
  295.     JVMTI_ERROR_ABSENT_INFORMATION = 101,
  296.     JVMTI_ERROR_INVALID_EVENT_TYPE = 102,
  297.     JVMTI_ERROR_ILLEGAL_ARGUMENT = 103,
  298.     JVMTI_ERROR_NATIVE_METHOD = 104,
  299.     JVMTI_ERROR_OUT_OF_MEMORY = 110,
  300.     JVMTI_ERROR_ACCESS_DENIED = 111,
  301.     JVMTI_ERROR_WRONG_PHASE = 112,
  302.     JVMTI_ERROR_INTERNAL = 113,
  303.     JVMTI_ERROR_UNATTACHED_THREAD = 115,
  304.     JVMTI_ERROR_INVALID_ENVIRONMENT = 116,
  305.     JVMTI_ERROR_MAX = 116
  306. } jvmtiError;
  307.  
  308.     /* Event IDs */
  309.  
  310. typedef enum {
  311.     JVMTI_MIN_EVENT_TYPE_VAL = 50,
  312.     JVMTI_EVENT_VM_INIT = 50,
  313.     JVMTI_EVENT_VM_DEATH = 51,
  314.     JVMTI_EVENT_THREAD_START = 52,
  315.     JVMTI_EVENT_THREAD_END = 53,
  316.     JVMTI_EVENT_CLASS_FILE_LOAD_HOOK = 54,
  317.     JVMTI_EVENT_CLASS_LOAD = 55,
  318.     JVMTI_EVENT_CLASS_PREPARE = 56,
  319.     JVMTI_EVENT_VM_START = 57,
  320.     JVMTI_EVENT_EXCEPTION = 58,
  321.     JVMTI_EVENT_EXCEPTION_CATCH = 59,
  322.     JVMTI_EVENT_SINGLE_STEP = 60,
  323.     JVMTI_EVENT_FRAME_POP = 61,
  324.     JVMTI_EVENT_BREAKPOINT = 62,
  325.     JVMTI_EVENT_FIELD_ACCESS = 63,
  326.     JVMTI_EVENT_FIELD_MODIFICATION = 64,
  327.     JVMTI_EVENT_METHOD_ENTRY = 65,
  328.     JVMTI_EVENT_METHOD_EXIT = 66,
  329.     JVMTI_EVENT_NATIVE_METHOD_BIND = 67,
  330.     JVMTI_EVENT_COMPILED_METHOD_LOAD = 68,
  331.     JVMTI_EVENT_COMPILED_METHOD_UNLOAD = 69,
  332.     JVMTI_EVENT_DYNAMIC_CODE_GENERATED = 70,
  333.     JVMTI_EVENT_DATA_DUMP_REQUEST = 71,
  334.     JVMTI_EVENT_MONITOR_WAIT = 73,
  335.     JVMTI_EVENT_MONITOR_WAITED = 74,
  336.     JVMTI_EVENT_MONITOR_CONTENDED_ENTER = 75,
  337.     JVMTI_EVENT_MONITOR_CONTENDED_ENTERED = 76,
  338.     JVMTI_EVENT_GARBAGE_COLLECTION_START = 81,
  339.     JVMTI_EVENT_GARBAGE_COLLECTION_FINISH = 82,
  340.     JVMTI_EVENT_OBJECT_FREE = 83,
  341.     JVMTI_EVENT_VM_OBJECT_ALLOC = 84,
  342.     JVMTI_MAX_EVENT_TYPE_VAL = 84
  343. } jvmtiEvent;
  344.  
  345.  
  346.     /* Function Types */
  347.  
  348. typedef void (JNICALL *jvmtiStartFunction)
  349.     (jvmtiEnv* jvmti_env, JNIEnv* jni_env, void* arg);
  350.  
  351. typedef jvmtiIterationControl (JNICALL *jvmtiHeapObjectCallback)
  352.     (jlong class_tag, jlong size, jlong* tag_ptr, void* user_data);
  353.  
  354. typedef jvmtiIterationControl (JNICALL *jvmtiHeapRootCallback)
  355.     (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong* tag_ptr, void* user_data);
  356.  
  357. typedef jvmtiIterationControl (JNICALL *jvmtiStackReferenceCallback)
  358.     (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong thread_tag, jint depth, jmethodID method, jint slot, void* user_data);
  359.  
  360. typedef jvmtiIterationControl (JNICALL *jvmtiObjectReferenceCallback)
  361.     (jvmtiObjectReferenceKind reference_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong referrer_tag, jint referrer_index, void* user_data);
  362.  
  363. typedef jvmtiError (JNICALL *jvmtiExtensionFunction)
  364.     (jvmtiEnv* jvmti_env,  ...);
  365.  
  366. typedef void (JNICALL *jvmtiExtensionEvent)
  367.     (jvmtiEnv* jvmti_env,  ...);
  368.  
  369.  
  370.     /* Structure Types */
  371.  
  372. typedef struct {
  373.     char* name;
  374.     jint priority;
  375.     jboolean is_daemon;
  376.     jthreadGroup thread_group;
  377.     jobject context_class_loader;
  378. } jvmtiThreadInfo;
  379.  
  380. typedef struct {
  381.     jthreadGroup parent;
  382.     char* name;
  383.     jint max_priority;
  384.     jboolean is_daemon;
  385. } jvmtiThreadGroupInfo;
  386.  
  387. typedef struct {
  388.     jmethodID method;
  389.     jlocation location;
  390. } jvmtiFrameInfo;
  391.  
  392. typedef struct {
  393.     jthread thread;
  394.     jint state;
  395.     jvmtiFrameInfo* frame_buffer;
  396.     jint frame_count;
  397. } jvmtiStackInfo;
  398.  
  399. typedef struct {
  400.     jclass klass;
  401.     jint class_byte_count;
  402.     const unsigned char* class_bytes;
  403. } jvmtiClassDefinition;
  404.  
  405. typedef struct {
  406.     jthread owner;
  407.     jint entry_count;
  408.     jint waiter_count;
  409.     jthread* waiters;
  410.     jint notify_waiter_count;
  411.     jthread* notify_waiters;
  412. } jvmtiMonitorUsage;
  413.  
  414. typedef struct {
  415.     jlocation start_location;
  416.     jint line_number;
  417. } jvmtiLineNumberEntry;
  418.  
  419. typedef struct {
  420.     jlocation start_location;
  421.     jint length;
  422.     char* name;
  423.     char* signature;
  424.     char* generic_signature;
  425.     jint slot;
  426. } jvmtiLocalVariableEntry;
  427.  
  428. typedef struct {
  429.     char* name;
  430.     jvmtiParamKind kind;
  431.     jvmtiParamTypes base_type;
  432.     jboolean null_ok;
  433. } jvmtiParamInfo;
  434.  
  435. typedef struct {
  436.     jvmtiExtensionFunction func;
  437.     char* id;
  438.     char* short_description;
  439.     jint param_count;
  440.     jvmtiParamInfo* params;
  441.     jint error_count;
  442.     jvmtiError* errors;
  443. } jvmtiExtensionFunctionInfo;
  444.  
  445. typedef struct {
  446.     jint extension_event_index;
  447.     char* id;
  448.     char* short_description;
  449.     jint param_count;
  450.     jvmtiParamInfo* params;
  451. } jvmtiExtensionEventInfo;
  452.  
  453. typedef struct {
  454.     jlong max_value;
  455.     jboolean may_skip_forward;
  456.     jboolean may_skip_backward;
  457.     jvmtiTimerKind kind;
  458.     jlong reserved1;
  459.     jlong reserved2;
  460. } jvmtiTimerInfo;
  461.  
  462. typedef struct {
  463.     const void* start_address;
  464.     jlocation location;
  465. } jvmtiAddrLocationMap;
  466.  
  467. typedef struct {
  468.     unsigned int can_tag_objects : 1;
  469.     unsigned int can_generate_field_modification_events : 1;
  470.     unsigned int can_generate_field_access_events : 1;
  471.     unsigned int can_get_bytecodes : 1;
  472.     unsigned int can_get_synthetic_attribute : 1;
  473.     unsigned int can_get_owned_monitor_info : 1;
  474.     unsigned int can_get_current_contended_monitor : 1;
  475.     unsigned int can_get_monitor_info : 1;
  476.     unsigned int can_pop_frame : 1;
  477.     unsigned int can_redefine_classes : 1;
  478.     unsigned int can_signal_thread : 1;
  479.     unsigned int can_get_source_file_name : 1;
  480.     unsigned int can_get_line_numbers : 1;
  481.     unsigned int can_get_source_debug_extension : 1;
  482.     unsigned int can_access_local_variables : 1;
  483.     unsigned int can_maintain_original_method_order : 1;
  484.     unsigned int can_generate_single_step_events : 1;
  485.     unsigned int can_generate_exception_events : 1;
  486.     unsigned int can_generate_frame_pop_events : 1;
  487.     unsigned int can_generate_breakpoint_events : 1;
  488.     unsigned int can_suspend : 1;
  489.     unsigned int can_redefine_any_class : 1;
  490.     unsigned int can_get_current_thread_cpu_time : 1;
  491.     unsigned int can_get_thread_cpu_time : 1;
  492.     unsigned int can_generate_method_entry_events : 1;
  493.     unsigned int can_generate_method_exit_events : 1;
  494.     unsigned int can_generate_all_class_hook_events : 1;
  495.     unsigned int can_generate_compiled_method_load_events : 1;
  496.     unsigned int can_generate_monitor_events : 1;
  497.     unsigned int can_generate_vm_object_alloc_events : 1;
  498.     unsigned int can_generate_native_method_bind_events : 1;
  499.     unsigned int can_generate_garbage_collection_events : 1;
  500.     unsigned int can_generate_object_free_events : 1;
  501.     unsigned int : 15;
  502.     unsigned int : 16;
  503.     unsigned int : 16;
  504.     unsigned int : 16;
  505.     unsigned int : 16;
  506.     unsigned int : 16;
  507. } jvmtiCapabilities;
  508.  
  509.  
  510.     /* Event Definitions */
  511.  
  512. typedef void (JNICALL *jvmtiEventReserved)(void);
  513.  
  514.  
  515. typedef void (JNICALL *jvmtiEventBreakpoint)
  516.     (jvmtiEnv *jvmti_env,
  517.      JNIEnv* jni_env,
  518.      jthread thread,
  519.      jmethodID method,
  520.      jlocation location);
  521.  
  522. typedef void (JNICALL *jvmtiEventClassFileLoadHook)
  523.     (jvmtiEnv *jvmti_env,
  524.      JNIEnv* jni_env,
  525.      jclass class_being_redefined,
  526.      jobject loader,
  527.      const char* name,
  528.      jobject protection_domain,
  529.      jint class_data_len,
  530.      const unsigned char* class_data,
  531.      jint* new_class_data_len,
  532.      unsigned char** new_class_data);
  533.  
  534. typedef void (JNICALL *jvmtiEventClassLoad)
  535.     (jvmtiEnv *jvmti_env,
  536.      JNIEnv* jni_env,
  537.      jthread thread,
  538.      jclass klass);
  539.  
  540. typedef void (JNICALL *jvmtiEventClassPrepare)
  541.     (jvmtiEnv *jvmti_env,
  542.      JNIEnv* jni_env,
  543.      jthread thread,
  544.      jclass klass);
  545.  
  546. typedef void (JNICALL *jvmtiEventCompiledMethodLoad)
  547.     (jvmtiEnv *jvmti_env,
  548.      jmethodID method,
  549.      jint code_size,
  550.      const void* code_addr,
  551.      jint map_length,
  552.      const jvmtiAddrLocationMap* map,
  553.      const void* compile_info);
  554.  
  555. typedef void (JNICALL *jvmtiEventCompiledMethodUnload)
  556.     (jvmtiEnv *jvmti_env,
  557.      jmethodID method,
  558.      const void* code_addr);
  559.  
  560. typedef void (JNICALL *jvmtiEventDataDumpRequest)
  561.     (jvmtiEnv *jvmti_env);
  562.  
  563. typedef void (JNICALL *jvmtiEventDynamicCodeGenerated)
  564.     (jvmtiEnv *jvmti_env,
  565.      const char* name,
  566.      const void* address,
  567.      jint length);
  568.  
  569. typedef void (JNICALL *jvmtiEventException)
  570.     (jvmtiEnv *jvmti_env,
  571.      JNIEnv* jni_env,
  572.      jthread thread,
  573.      jmethodID method,
  574.      jlocation location,
  575.      jobject exception,
  576.      jmethodID catch_method,
  577.      jlocation catch_location);
  578.  
  579. typedef void (JNICALL *jvmtiEventExceptionCatch)
  580.     (jvmtiEnv *jvmti_env,
  581.      JNIEnv* jni_env,
  582.      jthread thread,
  583.      jmethodID method,
  584.      jlocation location,
  585.      jobject exception);
  586.  
  587. typedef void (JNICALL *jvmtiEventFieldAccess)
  588.     (jvmtiEnv *jvmti_env,
  589.      JNIEnv* jni_env,
  590.      jthread thread,
  591.      jmethodID method,
  592.      jlocation location,
  593.      jclass field_klass,
  594.      jobject object,
  595.      jfieldID field);
  596.  
  597. typedef void (JNICALL *jvmtiEventFieldModification)
  598.     (jvmtiEnv *jvmti_env,
  599.      JNIEnv* jni_env,
  600.      jthread thread,
  601.      jmethodID method,
  602.      jlocation location,
  603.      jclass field_klass,
  604.      jobject object,
  605.      jfieldID field,
  606.      char signature_type,
  607.      jvalue new_value);
  608.  
  609. typedef void (JNICALL *jvmtiEventFramePop)
  610.     (jvmtiEnv *jvmti_env,
  611.      JNIEnv* jni_env,
  612.      jthread thread,
  613.      jmethodID method,
  614.      jboolean was_popped_by_exception);
  615.  
  616. typedef void (JNICALL *jvmtiEventGarbageCollectionFinish)
  617.     (jvmtiEnv *jvmti_env);
  618.  
  619. typedef void (JNICALL *jvmtiEventGarbageCollectionStart)
  620.     (jvmtiEnv *jvmti_env);
  621.  
  622. typedef void (JNICALL *jvmtiEventMethodEntry)
  623.     (jvmtiEnv *jvmti_env,
  624.      JNIEnv* jni_env,
  625.      jthread thread,
  626.      jmethodID method);
  627.  
  628. typedef void (JNICALL *jvmtiEventMethodExit)
  629.     (jvmtiEnv *jvmti_env,
  630.      JNIEnv* jni_env,
  631.      jthread thread,
  632.      jmethodID method,
  633.      jboolean was_popped_by_exception,
  634.      jvalue return_value);
  635.  
  636. typedef void (JNICALL *jvmtiEventMonitorContendedEnter)
  637.     (jvmtiEnv *jvmti_env,
  638.      JNIEnv* jni_env,
  639.      jthread thread,
  640.      jobject object);
  641.  
  642. typedef void (JNICALL *jvmtiEventMonitorContendedEntered)
  643.     (jvmtiEnv *jvmti_env,
  644.      JNIEnv* jni_env,
  645.      jthread thread,
  646.      jobject object);
  647.  
  648. typedef void (JNICALL *jvmtiEventMonitorWait)
  649.     (jvmtiEnv *jvmti_env,
  650.      JNIEnv* jni_env,
  651.      jthread thread,
  652.      jobject object,
  653.      jlong timeout);
  654.  
  655. typedef void (JNICALL *jvmtiEventMonitorWaited)
  656.     (jvmtiEnv *jvmti_env,
  657.      JNIEnv* jni_env,
  658.      jthread thread,
  659.      jobject object,
  660.      jboolean timed_out);
  661.  
  662. typedef void (JNICALL *jvmtiEventNativeMethodBind)
  663.     (jvmtiEnv *jvmti_env,
  664.      JNIEnv* jni_env,
  665.      jthread thread,
  666.      jmethodID method,
  667.      void* address,
  668.      void** new_address_ptr);
  669.  
  670. typedef void (JNICALL *jvmtiEventObjectFree)
  671.     (jvmtiEnv *jvmti_env,
  672.      jlong tag);
  673.  
  674. typedef void (JNICALL *jvmtiEventSingleStep)
  675.     (jvmtiEnv *jvmti_env,
  676.      JNIEnv* jni_env,
  677.      jthread thread,
  678.      jmethodID method,
  679.      jlocation location);
  680.  
  681. typedef void (JNICALL *jvmtiEventThreadEnd)
  682.     (jvmtiEnv *jvmti_env,
  683.      JNIEnv* jni_env,
  684.      jthread thread);
  685.  
  686. typedef void (JNICALL *jvmtiEventThreadStart)
  687.     (jvmtiEnv *jvmti_env,
  688.      JNIEnv* jni_env,
  689.      jthread thread);
  690.  
  691. typedef void (JNICALL *jvmtiEventVMDeath)
  692.     (jvmtiEnv *jvmti_env,
  693.      JNIEnv* jni_env);
  694.  
  695. typedef void (JNICALL *jvmtiEventVMInit)
  696.     (jvmtiEnv *jvmti_env,
  697.      JNIEnv* jni_env,
  698.      jthread thread);
  699.  
  700. typedef void (JNICALL *jvmtiEventVMObjectAlloc)
  701.     (jvmtiEnv *jvmti_env,
  702.      JNIEnv* jni_env,
  703.      jthread thread,
  704.      jobject object,
  705.      jclass object_klass,
  706.      jlong size);
  707.  
  708. typedef void (JNICALL *jvmtiEventVMStart)
  709.     (jvmtiEnv *jvmti_env,
  710.      JNIEnv* jni_env);
  711.  
  712.     /* Event Callback Structure */
  713.  
  714. typedef struct {
  715.                               /*   50 : VM Initialization Event */
  716.     jvmtiEventVMInit VMInit;
  717.                               /*   51 : VM Death Event */
  718.     jvmtiEventVMDeath VMDeath;
  719.                               /*   52 : Thread Start */
  720.     jvmtiEventThreadStart ThreadStart;
  721.                               /*   53 : Thread End */
  722.     jvmtiEventThreadEnd ThreadEnd;
  723.                               /*   54 : Class File Load Hook */
  724.     jvmtiEventClassFileLoadHook ClassFileLoadHook;
  725.                               /*   55 : Class Load */
  726.     jvmtiEventClassLoad ClassLoad;
  727.                               /*   56 : Class Prepare */
  728.     jvmtiEventClassPrepare ClassPrepare;
  729.                               /*   57 : VM Start Event */
  730.     jvmtiEventVMStart VMStart;
  731.                               /*   58 : Exception */
  732.     jvmtiEventException Exception;
  733.                               /*   59 : Exception Catch */
  734.     jvmtiEventExceptionCatch ExceptionCatch;
  735.                               /*   60 : Single Step */
  736.     jvmtiEventSingleStep SingleStep;
  737.                               /*   61 : Frame Pop */
  738.     jvmtiEventFramePop FramePop;
  739.                               /*   62 : Breakpoint */
  740.     jvmtiEventBreakpoint Breakpoint;
  741.                               /*   63 : Field Access */
  742.     jvmtiEventFieldAccess FieldAccess;
  743.                               /*   64 : Field Modification */
  744.     jvmtiEventFieldModification FieldModification;
  745.                               /*   65 : Method Entry */
  746.     jvmtiEventMethodEntry MethodEntry;
  747.                               /*   66 : Method Exit */
  748.     jvmtiEventMethodExit MethodExit;
  749.                               /*   67 : Native Method Bind */
  750.     jvmtiEventNativeMethodBind NativeMethodBind;
  751.                               /*   68 : Compiled Method Load */
  752.     jvmtiEventCompiledMethodLoad CompiledMethodLoad;
  753.                               /*   69 : Compiled Method Unload */
  754.     jvmtiEventCompiledMethodUnload CompiledMethodUnload;
  755.                               /*   70 : Dynamic Code Generated */
  756.     jvmtiEventDynamicCodeGenerated DynamicCodeGenerated;
  757.                               /*   71 : Data Dump Request */
  758.     jvmtiEventDataDumpRequest DataDumpRequest;
  759.                               /*   72 */
  760.     jvmtiEventReserved reserved72;
  761.                               /*   73 : Monitor Wait */
  762.     jvmtiEventMonitorWait MonitorWait;
  763.                               /*   74 : Monitor Waited */
  764.     jvmtiEventMonitorWaited MonitorWaited;
  765.                               /*   75 : Monitor Contended Enter */
  766.     jvmtiEventMonitorContendedEnter MonitorContendedEnter;
  767.                               /*   76 : Monitor Contended Entered */
  768.     jvmtiEventMonitorContendedEntered MonitorContendedEntered;
  769.                               /*   77 */
  770.     jvmtiEventReserved reserved77;
  771.                               /*   78 */
  772.     jvmtiEventReserved reserved78;
  773.                               /*   79 */
  774.     jvmtiEventReserved reserved79;
  775.                               /*   80 */
  776.     jvmtiEventReserved reserved80;
  777.                               /*   81 : Garbage Collection Start */
  778.     jvmtiEventGarbageCollectionStart GarbageCollectionStart;
  779.                               /*   82 : Garbage Collection Finish */
  780.     jvmtiEventGarbageCollectionFinish GarbageCollectionFinish;
  781.                               /*   83 : Object Free */
  782.     jvmtiEventObjectFree ObjectFree;
  783.                               /*   84 : VM Object Allocation */
  784.     jvmtiEventVMObjectAlloc VMObjectAlloc;
  785. } jvmtiEventCallbacks;
  786.  
  787.  
  788.     /* Function Interface */
  789.    
  790. typedef struct jvmtiInterface_1_ {
  791.  
  792.   /*   1 :  RESERVED */
  793.   void *reserved1;
  794.  
  795.   /*   2 : Set Event Notification Mode */
  796.   jvmtiError (JNICALL *SetEventNotificationMode) (jvmtiEnv* env,
  797.     jvmtiEventMode mode,
  798.     jvmtiEvent event_type,
  799.     jthread event_thread,
  800.      ...);
  801.  
  802.   /*   3 :  RESERVED */
  803.   void *reserved3;
  804.  
  805.   /*   4 : Get All Threads */
  806.   jvmtiError (JNICALL *GetAllThreads) (jvmtiEnv* env,
  807.     jint* threads_count_ptr,
  808.     jthread** threads_ptr);
  809.  
  810.   /*   5 : Suspend Thread */
  811.   jvmtiError (JNICALL *SuspendThread) (jvmtiEnv* env,
  812.     jthread thread);
  813.  
  814.   /*   6 : Resume Thread */
  815.   jvmtiError (JNICALL *ResumeThread) (jvmtiEnv* env,
  816.     jthread thread);
  817.  
  818.   /*   7 : Stop Thread */
  819.   jvmtiError (JNICALL *StopThread) (jvmtiEnv* env,
  820.     jthread thread,
  821.     jobject exception);
  822.  
  823.   /*   8 : Interrupt Thread */
  824.   jvmtiError (JNICALL *InterruptThread) (jvmtiEnv* env,
  825.     jthread thread);
  826.  
  827.   /*   9 : Get Thread Info */
  828.   jvmtiError (JNICALL *GetThreadInfo) (jvmtiEnv* env,
  829.     jthread thread,
  830.     jvmtiThreadInfo* info_ptr);
  831.  
  832.   /*   10 : Get Owned Monitor Info */
  833.   jvmtiError (JNICALL *GetOwnedMonitorInfo) (jvmtiEnv* env,
  834.     jthread thread,
  835.     jint* owned_monitor_count_ptr,
  836.     jobject** owned_monitors_ptr);
  837.  
  838.   /*   11 : Get Current Contended Monitor */
  839.   jvmtiError (JNICALL *GetCurrentContendedMonitor) (jvmtiEnv* env,
  840.     jthread thread,
  841.     jobject* monitor_ptr);
  842.  
  843.   /*   12 : Run Agent Thread */
  844.   jvmtiError (JNICALL *RunAgentThread) (jvmtiEnv* env,
  845.     jthread thread,
  846.     jvmtiStartFunction proc,
  847.     const void* arg,
  848.     jint priority);
  849.  
  850.   /*   13 : Get Top Thread Groups */
  851.   jvmtiError (JNICALL *GetTopThreadGroups) (jvmtiEnv* env,
  852.     jint* group_count_ptr,
  853.     jthreadGroup** groups_ptr);
  854.  
  855.   /*   14 : Get Thread Group Info */
  856.   jvmtiError (JNICALL *GetThreadGroupInfo) (jvmtiEnv* env,
  857.     jthreadGroup group,
  858.     jvmtiThreadGroupInfo* info_ptr);
  859.  
  860.   /*   15 : Get Thread Group Children */
  861.   jvmtiError (JNICALL *GetThreadGroupChildren) (jvmtiEnv* env,
  862.     jthreadGroup group,
  863.     jint* thread_count_ptr,
  864.     jthread** threads_ptr,
  865.     jint* group_count_ptr,
  866.     jthreadGroup** groups_ptr);
  867.  
  868.   /*   16 : Get Frame Count */
  869.   jvmtiError (JNICALL *GetFrameCount) (jvmtiEnv* env,
  870.     jthread thread,
  871.     jint* count_ptr);
  872.  
  873.   /*   17 : Get Thread State */
  874.   jvmtiError (JNICALL *GetThreadState) (jvmtiEnv* env,
  875.     jthread thread,
  876.     jint* thread_state_ptr);
  877.  
  878.   /*   18 :  RESERVED */
  879.   void *reserved18;
  880.  
  881.   /*   19 : Get Frame Location */
  882.   jvmtiError (JNICALL *GetFrameLocation) (jvmtiEnv* env,
  883.     jthread thread,
  884.     jint depth,
  885.     jmethodID* method_ptr,
  886.     jlocation* location_ptr);
  887.  
  888.   /*   20 : Notify Frame Pop */
  889.   jvmtiError (JNICALL *NotifyFramePop) (jvmtiEnv* env,
  890.     jthread thread,
  891.     jint depth);
  892.  
  893.   /*   21 : Get Local Variable - Object */
  894.   jvmtiError (JNICALL *GetLocalObject) (jvmtiEnv* env,
  895.     jthread thread,
  896.     jint depth,
  897.     jint slot,
  898.     jobject* value_ptr);
  899.  
  900.   /*   22 : Get Local Variable - Int */
  901.   jvmtiError (JNICALL *GetLocalInt) (jvmtiEnv* env,
  902.     jthread thread,
  903.     jint depth,
  904.     jint slot,
  905.     jint* value_ptr);
  906.  
  907.   /*   23 : Get Local Variable - Long */
  908.   jvmtiError (JNICALL *GetLocalLong) (jvmtiEnv* env,
  909.     jthread thread,
  910.     jint depth,
  911.     jint slot,
  912.     jlong* value_ptr);
  913.  
  914.   /*   24 : Get Local Variable - Float */
  915.   jvmtiError (JNICALL *GetLocalFloat) (jvmtiEnv* env,
  916.     jthread thread,
  917.     jint depth,
  918.     jint slot,
  919.     jfloat* value_ptr);
  920.  
  921.   /*   25 : Get Local Variable - Double */
  922.   jvmtiError (JNICALL *GetLocalDouble) (jvmtiEnv* env,
  923.     jthread thread,
  924.     jint depth,
  925.     jint slot,
  926.     jdouble* value_ptr);
  927.  
  928.   /*   26 : Set Local Variable - Object */
  929.   jvmtiError (JNICALL *SetLocalObject) (jvmtiEnv* env,
  930.     jthread thread,
  931.     jint depth,
  932.     jint slot,
  933.     jobject value);
  934.  
  935.   /*   27 : Set Local Variable - Int */
  936.   jvmtiError (JNICALL *SetLocalInt) (jvmtiEnv* env,
  937.     jthread thread,
  938.     jint depth,
  939.     jint slot,
  940.     jint value);
  941.  
  942.   /*   28 : Set Local Variable - Long */
  943.   jvmtiError (JNICALL *SetLocalLong) (jvmtiEnv* env,
  944.     jthread thread,
  945.     jint depth,
  946.     jint slot,
  947.     jlong value);
  948.  
  949.   /*   29 : Set Local Variable - Float */
  950.   jvmtiError (JNICALL *SetLocalFloat) (jvmtiEnv* env,
  951.     jthread thread,
  952.     jint depth,
  953.     jint slot,
  954.     jfloat value);
  955.  
  956.   /*   30 : Set Local Variable - Double */
  957.   jvmtiError (JNICALL *SetLocalDouble) (jvmtiEnv* env,
  958.     jthread thread,
  959.     jint depth,
  960.     jint slot,
  961.     jdouble value);
  962.  
  963.   /*   31 : Create Raw Monitor */
  964.   jvmtiError (JNICALL *CreateRawMonitor) (jvmtiEnv* env,
  965.     const char* name,
  966.     jrawMonitorID* monitor_ptr);
  967.  
  968.   /*   32 : Destroy Raw Monitor */
  969.   jvmtiError (JNICALL *DestroyRawMonitor) (jvmtiEnv* env,
  970.     jrawMonitorID monitor);
  971.  
  972.   /*   33 : Raw Monitor Enter */
  973.   jvmtiError (JNICALL *RawMonitorEnter) (jvmtiEnv* env,
  974.     jrawMonitorID monitor);
  975.  
  976.   /*   34 : Raw Monitor Exit */
  977.   jvmtiError (JNICALL *RawMonitorExit) (jvmtiEnv* env,
  978.     jrawMonitorID monitor);
  979.  
  980.   /*   35 : Raw Monitor Wait */
  981.   jvmtiError (JNICALL *RawMonitorWait) (jvmtiEnv* env,
  982.     jrawMonitorID monitor,
  983.     jlong millis);
  984.  
  985.   /*   36 : Raw Monitor Notify */
  986.   jvmtiError (JNICALL *RawMonitorNotify) (jvmtiEnv* env,
  987.     jrawMonitorID monitor);
  988.  
  989.   /*   37 : Raw Monitor Notify All */
  990.   jvmtiError (JNICALL *RawMonitorNotifyAll) (jvmtiEnv* env,
  991.     jrawMonitorID monitor);
  992.  
  993.   /*   38 : Set Breakpoint */
  994.   jvmtiError (JNICALL *SetBreakpoint) (jvmtiEnv* env,
  995.     jmethodID method,
  996.     jlocation location);
  997.  
  998.   /*   39 : Clear Breakpoint */
  999.   jvmtiError (JNICALL *ClearBreakpoint) (jvmtiEnv* env,
  1000.     jmethodID method,
  1001.     jlocation location);
  1002.  
  1003.   /*   40 :  RESERVED */
  1004.   void *reserved40;
  1005.  
  1006.   /*   41 : Set Field Access Watch */
  1007.   jvmtiError (JNICALL *SetFieldAccessWatch) (jvmtiEnv* env,
  1008.     jclass klass,
  1009.     jfieldID field);
  1010.  
  1011.   /*   42 : Clear Field Access Watch */
  1012.   jvmtiError (JNICALL *ClearFieldAccessWatch) (jvmtiEnv* env,
  1013.     jclass klass,
  1014.     jfieldID field);
  1015.  
  1016.   /*   43 : Set Field Modification Watch */
  1017.   jvmtiError (JNICALL *SetFieldModificationWatch) (jvmtiEnv* env,
  1018.     jclass klass,
  1019.     jfieldID field);
  1020.  
  1021.   /*   44 : Clear Field Modification Watch */
  1022.   jvmtiError (JNICALL *ClearFieldModificationWatch) (jvmtiEnv* env,
  1023.     jclass klass,
  1024.     jfieldID field);
  1025.  
  1026.   /*   45 :  RESERVED */
  1027.   void *reserved45;
  1028.  
  1029.   /*   46 : Allocate */
  1030.   jvmtiError (JNICALL *Allocate) (jvmtiEnv* env,
  1031.     jlong size,
  1032.     unsigned char** mem_ptr);
  1033.  
  1034.   /*   47 : Deallocate */
  1035.   jvmtiError (JNICALL *Deallocate) (jvmtiEnv* env,
  1036.     unsigned char* mem);
  1037.  
  1038.   /*   48 : Get Class Signature */
  1039.   jvmtiError (JNICALL *GetClassSignature) (jvmtiEnv* env,
  1040.     jclass klass,
  1041.     char** signature_ptr,
  1042.     char** generic_ptr);
  1043.  
  1044.   /*   49 : Get Class Status */
  1045.   jvmtiError (JNICALL *GetClassStatus) (jvmtiEnv* env,
  1046.     jclass klass,
  1047.     jint* status_ptr);
  1048.  
  1049.   /*   50 : Get Source File Name */
  1050.   jvmtiError (JNICALL *GetSourceFileName) (jvmtiEnv* env,
  1051.     jclass klass,
  1052.     char** source_name_ptr);
  1053.  
  1054.   /*   51 : Get Class Modifiers */
  1055.   jvmtiError (JNICALL *GetClassModifiers) (jvmtiEnv* env,
  1056.     jclass klass,
  1057.     jint* modifiers_ptr);
  1058.  
  1059.   /*   52 : Get Class Methods */
  1060.   jvmtiError (JNICALL *GetClassMethods) (jvmtiEnv* env,
  1061.     jclass klass,
  1062.     jint* method_count_ptr,
  1063.     jmethodID** methods_ptr);
  1064.  
  1065.   /*   53 : Get Class Fields */
  1066.   jvmtiError (JNICALL *GetClassFields) (jvmtiEnv* env,
  1067.     jclass klass,
  1068.     jint* field_count_ptr,
  1069.     jfieldID** fields_ptr);
  1070.  
  1071.   /*   54 : Get Implemented Interfaces */
  1072.   jvmtiError (JNICALL *GetImplementedInterfaces) (jvmtiEnv* env,
  1073.     jclass klass,
  1074.     jint* interface_count_ptr,
  1075.     jclass** interfaces_ptr);
  1076.  
  1077.   /*   55 : Is Interface */
  1078.   jvmtiError (JNICALL *IsInterface) (jvmtiEnv* env,
  1079.     jclass klass,
  1080.     jboolean* is_interface_ptr);
  1081.  
  1082.   /*   56 : Is Array Class */
  1083.   jvmtiError (JNICALL *IsArrayClass) (jvmtiEnv* env,
  1084.     jclass klass,
  1085.     jboolean* is_array_class_ptr);
  1086.  
  1087.   /*   57 : Get Class Loader */
  1088.   jvmtiError (JNICALL *GetClassLoader) (jvmtiEnv* env,
  1089.     jclass klass,
  1090.     jobject* classloader_ptr);
  1091.  
  1092.   /*   58 : Get Object Hash Code */
  1093.   jvmtiError (JNICALL *GetObjectHashCode) (jvmtiEnv* env,
  1094.     jobject object,
  1095.     jint* hash_code_ptr);
  1096.  
  1097.   /*   59 : Get Object Monitor Usage */
  1098.   jvmtiError (JNICALL *GetObjectMonitorUsage) (jvmtiEnv* env,
  1099.     jobject object,
  1100.     jvmtiMonitorUsage* info_ptr);
  1101.  
  1102.   /*   60 : Get Field Name (and Signature) */
  1103.   jvmtiError (JNICALL *GetFieldName) (jvmtiEnv* env,
  1104.     jclass klass,
  1105.     jfieldID field,
  1106.     char** name_ptr,
  1107.     char** signature_ptr,
  1108.     char** generic_ptr);
  1109.  
  1110.   /*   61 : Get Field Declaring Class */
  1111.   jvmtiError (JNICALL *GetFieldDeclaringClass) (jvmtiEnv* env,
  1112.     jclass klass,
  1113.     jfieldID field,
  1114.     jclass* declaring_class_ptr);
  1115.  
  1116.   /*   62 : Get Field Modifiers */
  1117.   jvmtiError (JNICALL *GetFieldModifiers) (jvmtiEnv* env,
  1118.     jclass klass,
  1119.     jfieldID field,
  1120.     jint* modifiers_ptr);
  1121.  
  1122.   /*   63 : Is Field Synthetic */
  1123.   jvmtiError (JNICALL *IsFieldSynthetic) (jvmtiEnv* env,
  1124.     jclass klass,
  1125.     jfieldID field,
  1126.     jboolean* is_synthetic_ptr);
  1127.  
  1128.   /*   64 : Get Method Name (and Signature) */
  1129.   jvmtiError (JNICALL *GetMethodName) (jvmtiEnv* env,
  1130.     jmethodID method,
  1131.     char** name_ptr,
  1132.     char** signature_ptr,
  1133.     char** generic_ptr);
  1134.  
  1135.   /*   65 : Get Method Declaring Class */
  1136.   jvmtiError (JNICALL *GetMethodDeclaringClass) (jvmtiEnv* env,
  1137.     jmethodID method,
  1138.     jclass* declaring_class_ptr);
  1139.  
  1140.   /*   66 : Get Method Modifiers */
  1141.   jvmtiError (JNICALL *GetMethodModifiers) (jvmtiEnv* env,
  1142.     jmethodID method,
  1143.     jint* modifiers_ptr);
  1144.  
  1145.   /*   67 :  RESERVED */
  1146.   void *reserved67;
  1147.  
  1148.   /*   68 : Get Max Locals */
  1149.   jvmtiError (JNICALL *GetMaxLocals) (jvmtiEnv* env,
  1150.     jmethodID method,
  1151.     jint* max_ptr);
  1152.  
  1153.   /*   69 : Get Arguments Size */
  1154.   jvmtiError (JNICALL *GetArgumentsSize) (jvmtiEnv* env,
  1155.     jmethodID method,
  1156.     jint* size_ptr);
  1157.  
  1158.   /*   70 : Get Line Number Table */
  1159.   jvmtiError (JNICALL *GetLineNumberTable) (jvmtiEnv* env,
  1160.     jmethodID method,
  1161.     jint* entry_count_ptr,
  1162.     jvmtiLineNumberEntry** table_ptr);
  1163.  
  1164.   /*   71 : Get Method Location */
  1165.   jvmtiError (JNICALL *GetMethodLocation) (jvmtiEnv* env,
  1166.     jmethodID method,
  1167.     jlocation* start_location_ptr,
  1168.     jlocation* end_location_ptr);
  1169.  
  1170.   /*   72 : Get Local Variable Table */
  1171.   jvmtiError (JNICALL *GetLocalVariableTable) (jvmtiEnv* env,
  1172.     jmethodID method,
  1173.     jint* entry_count_ptr,
  1174.     jvmtiLocalVariableEntry** table_ptr);
  1175.  
  1176.   /*   73 :  RESERVED */
  1177.   void *reserved73;
  1178.  
  1179.   /*   74 :  RESERVED */
  1180.   void *reserved74;
  1181.  
  1182.   /*   75 : Get Bytecodes */
  1183.   jvmtiError (JNICALL *GetBytecodes) (jvmtiEnv* env,
  1184.     jmethodID method,
  1185.     jint* bytecode_count_ptr,
  1186.     unsigned char** bytecodes_ptr);
  1187.  
  1188.   /*   76 : Is Method Native */
  1189.   jvmtiError (JNICALL *IsMethodNative) (jvmtiEnv* env,
  1190.     jmethodID method,
  1191.     jboolean* is_native_ptr);
  1192.  
  1193.   /*   77 : Is Method Synthetic */
  1194.   jvmtiError (JNICALL *IsMethodSynthetic) (jvmtiEnv* env,
  1195.     jmethodID method,
  1196.     jboolean* is_synthetic_ptr);
  1197.  
  1198.   /*   78 : Get Loaded Classes */
  1199.   jvmtiError (JNICALL *GetLoadedClasses) (jvmtiEnv* env,
  1200.     jint* class_count_ptr,
  1201.     jclass** classes_ptr);
  1202.  
  1203.   /*   79 : Get Classloader Classes */
  1204.   jvmtiError (JNICALL *GetClassLoaderClasses) (jvmtiEnv* env,
  1205.     jobject initiating_loader,
  1206.     jint* class_count_ptr,
  1207.     jclass** classes_ptr);
  1208.  
  1209.   /*   80 : Pop Frame */
  1210.   jvmtiError (JNICALL *PopFrame) (jvmtiEnv* env,
  1211.     jthread thread);
  1212.  
  1213.   /*   81 :  RESERVED */
  1214.   void *reserved81;
  1215.  
  1216.   /*   82 :  RESERVED */
  1217.   void *reserved82;
  1218.  
  1219.   /*   83 :  RESERVED */
  1220.   void *reserved83;
  1221.  
  1222.   /*   84 :  RESERVED */
  1223.   void *reserved84;
  1224.  
  1225.   /*   85 :  RESERVED */
  1226.   void *reserved85;
  1227.  
  1228.   /*   86 :  RESERVED */
  1229.   void *reserved86;
  1230.  
  1231.   /*   87 : Redefine Classes */
  1232.   jvmtiError (JNICALL *RedefineClasses) (jvmtiEnv* env,
  1233.     jint class_count,
  1234.     const jvmtiClassDefinition* class_definitions);
  1235.  
  1236.   /*   88 : Get Version Number */
  1237.   jvmtiError (JNICALL *GetVersionNumber) (jvmtiEnv* env,
  1238.     jint* version_ptr);
  1239.  
  1240.   /*   89 : Get Capabilities */
  1241.   jvmtiError (JNICALL *GetCapabilities) (jvmtiEnv* env,
  1242.     jvmtiCapabilities* capabilities_ptr);
  1243.  
  1244.   /*   90 : Get Source Debug Extension */
  1245.   jvmtiError (JNICALL *GetSourceDebugExtension) (jvmtiEnv* env,
  1246.     jclass klass,
  1247.     char** source_debug_extension_ptr);
  1248.  
  1249.   /*   91 : Is Method Obsolete */
  1250.   jvmtiError (JNICALL *IsMethodObsolete) (jvmtiEnv* env,
  1251.     jmethodID method,
  1252.     jboolean* is_obsolete_ptr);
  1253.  
  1254.   /*   92 : Suspend Thread List */
  1255.   jvmtiError (JNICALL *SuspendThreadList) (jvmtiEnv* env,
  1256.     jint request_count,
  1257.     const jthread* request_list,
  1258.     jvmtiError* results);
  1259.  
  1260.   /*   93 : Resume Thread List */
  1261.   jvmtiError (JNICALL *ResumeThreadList) (jvmtiEnv* env,
  1262.     jint request_count,
  1263.     const jthread* request_list,
  1264.     jvmtiError* results);
  1265.  
  1266.   /*   94 :  RESERVED */
  1267.   void *reserved94;
  1268.  
  1269.   /*   95 :  RESERVED */
  1270.   void *reserved95;
  1271.  
  1272.   /*   96 :  RESERVED */
  1273.   void *reserved96;
  1274.  
  1275.   /*   97 :  RESERVED */
  1276.   void *reserved97;
  1277.  
  1278.   /*   98 :  RESERVED */
  1279.   void *reserved98;
  1280.  
  1281.   /*   99 :  RESERVED */
  1282.   void *reserved99;
  1283.  
  1284.   /*   100 : Get All Stack Traces */
  1285.   jvmtiError (JNICALL *GetAllStackTraces) (jvmtiEnv* env,
  1286.     jint max_frame_count,
  1287.     jvmtiStackInfo** stack_info_ptr,
  1288.     jint* thread_count_ptr);
  1289.  
  1290.   /*   101 : Get Thread List Stack Traces */
  1291.   jvmtiError (JNICALL *GetThreadListStackTraces) (jvmtiEnv* env,
  1292.     jint thread_count,
  1293.     const jthread* thread_list,
  1294.     jint max_frame_count,
  1295.     jvmtiStackInfo** stack_info_ptr);
  1296.  
  1297.   /*   102 : Get Thread Local Storage */
  1298.   jvmtiError (JNICALL *GetThreadLocalStorage) (jvmtiEnv* env,
  1299.     jthread thread,
  1300.     void** data_ptr);
  1301.  
  1302.   /*   103 : Set Thread Local Storage */
  1303.   jvmtiError (JNICALL *SetThreadLocalStorage) (jvmtiEnv* env,
  1304.     jthread thread,
  1305.     const void* data);
  1306.  
  1307.   /*   104 : Get Stack Trace */
  1308.   jvmtiError (JNICALL *GetStackTrace) (jvmtiEnv* env,
  1309.     jthread thread,
  1310.     jint start_depth,
  1311.     jint max_frame_count,
  1312.     jvmtiFrameInfo* frame_buffer,
  1313.     jint* count_ptr);
  1314.  
  1315.   /*   105 :  RESERVED */
  1316.   void *reserved105;
  1317.  
  1318.   /*   106 : Get Tag */
  1319.   jvmtiError (JNICALL *GetTag) (jvmtiEnv* env,
  1320.     jobject object,
  1321.     jlong* tag_ptr);
  1322.  
  1323.   /*   107 : Set Tag */
  1324.   jvmtiError (JNICALL *SetTag) (jvmtiEnv* env,
  1325.     jobject object,
  1326.     jlong tag);
  1327.  
  1328.   /*   108 : Force Garbage Collection */
  1329.   jvmtiError (JNICALL *ForceGarbageCollection) (jvmtiEnv* env);
  1330.  
  1331.   /*   109 : Iterate Over Objects Reachable From Object */
  1332.   jvmtiError (JNICALL *IterateOverObjectsReachableFromObject) (jvmtiEnv* env,
  1333.     jobject object,
  1334.     jvmtiObjectReferenceCallback object_reference_callback,
  1335.     void* user_data);
  1336.  
  1337.   /*   110 : Iterate Over Reachable Objects */
  1338.   jvmtiError (JNICALL *IterateOverReachableObjects) (jvmtiEnv* env,
  1339.     jvmtiHeapRootCallback heap_root_callback,
  1340.     jvmtiStackReferenceCallback stack_ref_callback,
  1341.     jvmtiObjectReferenceCallback object_ref_callback,
  1342.     void* user_data);
  1343.  
  1344.   /*   111 : Iterate Over Heap */
  1345.   jvmtiError (JNICALL *IterateOverHeap) (jvmtiEnv* env,
  1346.     jvmtiHeapObjectFilter object_filter,
  1347.     jvmtiHeapObjectCallback heap_object_callback,
  1348.     void* user_data);
  1349.  
  1350.   /*   112 : Iterate Over Instances Of Class */
  1351.   jvmtiError (JNICALL *IterateOverInstancesOfClass) (jvmtiEnv* env,
  1352.     jclass klass,
  1353.     jvmtiHeapObjectFilter object_filter,
  1354.     jvmtiHeapObjectCallback heap_object_callback,
  1355.     void* user_data);
  1356.  
  1357.   /*   113 :  RESERVED */
  1358.   void *reserved113;
  1359.  
  1360.   /*   114 : Get Objects With Tags */
  1361.   jvmtiError (JNICALL *GetObjectsWithTags) (jvmtiEnv* env,
  1362.     jint tag_count,
  1363.     const jlong* tags,
  1364.     jint* count_ptr,
  1365.     jobject** object_result_ptr,
  1366.     jlong** tag_result_ptr);
  1367.  
  1368.   /*   115 :  RESERVED */
  1369.   void *reserved115;
  1370.  
  1371.   /*   116 :  RESERVED */
  1372.   void *reserved116;
  1373.  
  1374.   /*   117 :  RESERVED */
  1375.   void *reserved117;
  1376.  
  1377.   /*   118 :  RESERVED */
  1378.   void *reserved118;
  1379.  
  1380.   /*   119 :  RESERVED */
  1381.   void *reserved119;
  1382.  
  1383.   /*   120 : Set JNI Function Table */
  1384.   jvmtiError (JNICALL *SetJNIFunctionTable) (jvmtiEnv* env,
  1385.     const jniNativeInterface* function_table);
  1386.  
  1387.   /*   121 : Get JNI Function Table */
  1388.   jvmtiError (JNICALL *GetJNIFunctionTable) (jvmtiEnv* env,
  1389.     jniNativeInterface** function_table);
  1390.  
  1391.   /*   122 : Set Event Callbacks */
  1392.   jvmtiError (JNICALL *SetEventCallbacks) (jvmtiEnv* env,
  1393.     const jvmtiEventCallbacks* callbacks,
  1394.     jint size_of_callbacks);
  1395.  
  1396.   /*   123 : Generate Events */
  1397.   jvmtiError (JNICALL *GenerateEvents) (jvmtiEnv* env,
  1398.     jvmtiEvent event_type);
  1399.  
  1400.   /*   124 : Get Extension Functions */
  1401.   jvmtiError (JNICALL *GetExtensionFunctions) (jvmtiEnv* env,
  1402.     jint* extension_count_ptr,
  1403.     jvmtiExtensionFunctionInfo** extensions);
  1404.  
  1405.   /*   125 : Get Extension Events */
  1406.   jvmtiError (JNICALL *GetExtensionEvents) (jvmtiEnv* env,
  1407.     jint* extension_count_ptr,
  1408.     jvmtiExtensionEventInfo** extensions);
  1409.  
  1410.   /*   126 : Set Extension Event Callback */
  1411.   jvmtiError (JNICALL *SetExtensionEventCallback) (jvmtiEnv* env,
  1412.     jint extension_event_index,
  1413.     jvmtiExtensionEvent callback);
  1414.  
  1415.   /*   127 : Dispose Environment */
  1416.   jvmtiError (JNICALL *DisposeEnvironment) (jvmtiEnv* env);
  1417.  
  1418.   /*   128 : Get Error Name */
  1419.   jvmtiError (JNICALL *GetErrorName) (jvmtiEnv* env,
  1420.     jvmtiError error,
  1421.     char** name_ptr);
  1422.  
  1423.   /*   129 : Get JLocation Format */
  1424.   jvmtiError (JNICALL *GetJLocationFormat) (jvmtiEnv* env,
  1425.     jvmtiJlocationFormat* format_ptr);
  1426.  
  1427.   /*   130 : Get System Properties */
  1428.   jvmtiError (JNICALL *GetSystemProperties) (jvmtiEnv* env,
  1429.     jint* count_ptr,
  1430.     char*** property_ptr);
  1431.  
  1432.   /*   131 : Get System Property */
  1433.   jvmtiError (JNICALL *GetSystemProperty) (jvmtiEnv* env,
  1434.     const char* property,
  1435.     char** value_ptr);
  1436.  
  1437.   /*   132 : Set System Property */
  1438.   jvmtiError (JNICALL *SetSystemProperty) (jvmtiEnv* env,
  1439.     const char* property,
  1440.     const char* value);
  1441.  
  1442.   /*   133 : Get Phase */
  1443.   jvmtiError (JNICALL *GetPhase) (jvmtiEnv* env,
  1444.     jvmtiPhase* phase_ptr);
  1445.  
  1446.   /*   134 : Get Current Thread CPU Timer Information */
  1447.   jvmtiError (JNICALL *GetCurrentThreadCpuTimerInfo) (jvmtiEnv* env,
  1448.     jvmtiTimerInfo* info_ptr);
  1449.  
  1450.   /*   135 : Get Current Thread CPU Time */
  1451.   jvmtiError (JNICALL *GetCurrentThreadCpuTime) (jvmtiEnv* env,
  1452.     jlong* nanos_ptr);
  1453.  
  1454.   /*   136 : Get Thread CPU Timer Information */
  1455.   jvmtiError (JNICALL *GetThreadCpuTimerInfo) (jvmtiEnv* env,
  1456.     jvmtiTimerInfo* info_ptr);
  1457.  
  1458.   /*   137 : Get Thread CPU Time */
  1459.   jvmtiError (JNICALL *GetThreadCpuTime) (jvmtiEnv* env,
  1460.     jthread thread,
  1461.     jlong* nanos_ptr);
  1462.  
  1463.   /*   138 : Get Timer Information */
  1464.   jvmtiError (JNICALL *GetTimerInfo) (jvmtiEnv* env,
  1465.     jvmtiTimerInfo* info_ptr);
  1466.  
  1467.   /*   139 : Get Time */
  1468.   jvmtiError (JNICALL *GetTime) (jvmtiEnv* env,
  1469.     jlong* nanos_ptr);
  1470.  
  1471.   /*   140 : Get Potential Capabilities */
  1472.   jvmtiError (JNICALL *GetPotentialCapabilities) (jvmtiEnv* env,
  1473.     jvmtiCapabilities* capabilities_ptr);
  1474.  
  1475.   /*   141 :  RESERVED */
  1476.   void *reserved141;
  1477.  
  1478.   /*   142 : Add Capabilities */
  1479.   jvmtiError (JNICALL *AddCapabilities) (jvmtiEnv* env,
  1480.     const jvmtiCapabilities* capabilities_ptr);
  1481.  
  1482.   /*   143 : Relinquish Capabilities */
  1483.   jvmtiError (JNICALL *RelinquishCapabilities) (jvmtiEnv* env,
  1484.     const jvmtiCapabilities* capabilities_ptr);
  1485.  
  1486.   /*   144 : Get Available Processors */
  1487.   jvmtiError (JNICALL *GetAvailableProcessors) (jvmtiEnv* env,
  1488.     jint* processor_count_ptr);
  1489.  
  1490.   /*   145 :  RESERVED */
  1491.   void *reserved145;
  1492.  
  1493.   /*   146 :  RESERVED */
  1494.   void *reserved146;
  1495.  
  1496.   /*   147 : Get Environment Local Storage */
  1497.   jvmtiError (JNICALL *GetEnvironmentLocalStorage) (jvmtiEnv* env,
  1498.     void** data_ptr);
  1499.  
  1500.   /*   148 : Set Environment Local Storage */
  1501.   jvmtiError (JNICALL *SetEnvironmentLocalStorage) (jvmtiEnv* env,
  1502.     const void* data);
  1503.  
  1504.   /*   149 : Add To Bootstrap Class Loader Search */
  1505.   jvmtiError (JNICALL *AddToBootstrapClassLoaderSearch) (jvmtiEnv* env,
  1506.     const char* segment);
  1507.  
  1508.   /*   150 : Set Verbose Flag */
  1509.   jvmtiError (JNICALL *SetVerboseFlag) (jvmtiEnv* env,
  1510.     jvmtiVerboseFlag flag,
  1511.     jboolean value);
  1512.  
  1513.   /*   151 :  RESERVED */
  1514.   void *reserved151;
  1515.  
  1516.   /*   152 :  RESERVED */
  1517.   void *reserved152;
  1518.  
  1519.   /*   153 :  RESERVED */
  1520.   void *reserved153;
  1521.  
  1522.   /*   154 : Get Object Size */
  1523.   jvmtiError (JNICALL *GetObjectSize) (jvmtiEnv* env,
  1524.     jobject object,
  1525.     jlong* size_ptr);
  1526.  
  1527. } jvmtiInterface_1;
  1528.  
  1529. struct _jvmtiEnv {
  1530.     const struct jvmtiInterface_1_ *functions;
  1531. #ifdef __cplusplus
  1532.  
  1533.  
  1534.   jvmtiError Allocate(jlong size,
  1535.             unsigned char** mem_ptr) {
  1536.     return functions->Allocate(this, size, mem_ptr);
  1537.   }
  1538.  
  1539.   jvmtiError Deallocate(unsigned char* mem) {
  1540.     return functions->Deallocate(this, mem);
  1541.   }
  1542.  
  1543.   jvmtiError GetThreadState(jthread thread,
  1544.             jint* thread_state_ptr) {
  1545.     return functions->GetThreadState(this, thread, thread_state_ptr);
  1546.   }
  1547.  
  1548.   jvmtiError GetAllThreads(jint* threads_count_ptr,
  1549.             jthread** threads_ptr) {
  1550.     return functions->GetAllThreads(this, threads_count_ptr, threads_ptr);
  1551.   }
  1552.  
  1553.   jvmtiError SuspendThread(jthread thread) {
  1554.     return functions->SuspendThread(this, thread);
  1555.   }
  1556.  
  1557.   jvmtiError SuspendThreadList(jint request_count,
  1558.             const jthread* request_list,
  1559.             jvmtiError* results) {
  1560.     return functions->SuspendThreadList(this, request_count, request_list, results);
  1561.   }
  1562.  
  1563.   jvmtiError ResumeThread(jthread thread) {
  1564.     return functions->ResumeThread(this, thread);
  1565.   }
  1566.  
  1567.   jvmtiError ResumeThreadList(jint request_count,
  1568.             const jthread* request_list,
  1569.             jvmtiError* results) {
  1570.     return functions->ResumeThreadList(this, request_count, request_list, results);
  1571.   }
  1572.  
  1573.   jvmtiError StopThread(jthread thread,
  1574.             jobject exception) {
  1575.     return functions->StopThread(this, thread, exception);
  1576.   }
  1577.  
  1578.   jvmtiError InterruptThread(jthread thread) {
  1579.     return functions->InterruptThread(this, thread);
  1580.   }
  1581.  
  1582.   jvmtiError GetThreadInfo(jthread thread,
  1583.             jvmtiThreadInfo* info_ptr) {
  1584.     return functions->GetThreadInfo(this, thread, info_ptr);
  1585.   }
  1586.  
  1587.   jvmtiError GetOwnedMonitorInfo(jthread thread,
  1588.             jint* owned_monitor_count_ptr,
  1589.             jobject** owned_monitors_ptr) {
  1590.     return functions->GetOwnedMonitorInfo(this, thread, owned_monitor_count_ptr, owned_monitors_ptr);
  1591.   }
  1592.  
  1593.   jvmtiError GetCurrentContendedMonitor(jthread thread,
  1594.             jobject* monitor_ptr) {
  1595.     return functions->GetCurrentContendedMonitor(this, thread, monitor_ptr);
  1596.   }
  1597.  
  1598.   jvmtiError RunAgentThread(jthread thread,
  1599.             jvmtiStartFunction proc,
  1600.             const void* arg,
  1601.             jint priority) {
  1602.     return functions->RunAgentThread(this, thread, proc, arg, priority);
  1603.   }
  1604.  
  1605.   jvmtiError SetThreadLocalStorage(jthread thread,
  1606.             const void* data) {
  1607.     return functions->SetThreadLocalStorage(this, thread, data);
  1608.   }
  1609.  
  1610.   jvmtiError GetThreadLocalStorage(jthread thread,
  1611.             void** data_ptr) {
  1612.     return functions->GetThreadLocalStorage(this, thread, data_ptr);
  1613.   }
  1614.  
  1615.   jvmtiError GetTopThreadGroups(jint* group_count_ptr,
  1616.             jthreadGroup** groups_ptr) {
  1617.     return functions->GetTopThreadGroups(this, group_count_ptr, groups_ptr);
  1618.   }
  1619.  
  1620.   jvmtiError GetThreadGroupInfo(jthreadGroup group,
  1621.             jvmtiThreadGroupInfo* info_ptr) {
  1622.     return functions->GetThreadGroupInfo(this, group, info_ptr);
  1623.   }
  1624.  
  1625.   jvmtiError GetThreadGroupChildren(jthreadGroup group,
  1626.             jint* thread_count_ptr,
  1627.             jthread** threads_ptr,
  1628.             jint* group_count_ptr,
  1629.             jthreadGroup** groups_ptr) {
  1630.     return functions->GetThreadGroupChildren(this, group, thread_count_ptr, threads_ptr, group_count_ptr, groups_ptr);
  1631.   }
  1632.  
  1633.   jvmtiError GetStackTrace(jthread thread,
  1634.             jint start_depth,
  1635.             jint max_frame_count,
  1636.             jvmtiFrameInfo* frame_buffer,
  1637.             jint* count_ptr) {
  1638.     return functions->GetStackTrace(this, thread, start_depth, max_frame_count, frame_buffer, count_ptr);
  1639.   }
  1640.  
  1641.   jvmtiError GetAllStackTraces(jint max_frame_count,
  1642.             jvmtiStackInfo** stack_info_ptr,
  1643.             jint* thread_count_ptr) {
  1644.     return functions->GetAllStackTraces(this, max_frame_count, stack_info_ptr, thread_count_ptr);
  1645.   }
  1646.  
  1647.   jvmtiError GetThreadListStackTraces(jint thread_count,
  1648.             const jthread* thread_list,
  1649.             jint max_frame_count,
  1650.             jvmtiStackInfo** stack_info_ptr) {
  1651.     return functions->GetThreadListStackTraces(this, thread_count, thread_list, max_frame_count, stack_info_ptr);
  1652.   }
  1653.  
  1654.   jvmtiError GetFrameCount(jthread thread,
  1655.             jint* count_ptr) {
  1656.     return functions->GetFrameCount(this, thread, count_ptr);
  1657.   }
  1658.  
  1659.   jvmtiError PopFrame(jthread thread) {
  1660.     return functions->PopFrame(this, thread);
  1661.   }
  1662.  
  1663.   jvmtiError GetFrameLocation(jthread thread,
  1664.             jint depth,
  1665.             jmethodID* method_ptr,
  1666.             jlocation* location_ptr) {
  1667.     return functions->GetFrameLocation(this, thread, depth, method_ptr, location_ptr);
  1668.   }
  1669.  
  1670.   jvmtiError NotifyFramePop(jthread thread,
  1671.             jint depth) {
  1672.     return functions->NotifyFramePop(this, thread, depth);
  1673.   }
  1674.  
  1675.   jvmtiError GetTag(jobject object,
  1676.             jlong* tag_ptr) {
  1677.     return functions->GetTag(this, object, tag_ptr);
  1678.   }
  1679.  
  1680.   jvmtiError SetTag(jobject object,
  1681.             jlong tag) {
  1682.     return functions->SetTag(this, object, tag);
  1683.   }
  1684.  
  1685.   jvmtiError ForceGarbageCollection() {
  1686.     return functions->ForceGarbageCollection(this);
  1687.   }
  1688.  
  1689.   jvmtiError IterateOverObjectsReachableFromObject(jobject object,
  1690.             jvmtiObjectReferenceCallback object_reference_callback,
  1691.             void* user_data) {
  1692.     return functions->IterateOverObjectsReachableFromObject(this, object, object_reference_callback, user_data);
  1693.   }
  1694.  
  1695.   jvmtiError IterateOverReachableObjects(jvmtiHeapRootCallback heap_root_callback,
  1696.             jvmtiStackReferenceCallback stack_ref_callback,
  1697.             jvmtiObjectReferenceCallback object_ref_callback,
  1698.             void* user_data) {
  1699.     return functions->IterateOverReachableObjects(this, heap_root_callback, stack_ref_callback, object_ref_callback, user_data);
  1700.   }
  1701.  
  1702.   jvmtiError IterateOverHeap(jvmtiHeapObjectFilter object_filter,
  1703.             jvmtiHeapObjectCallback heap_object_callback,
  1704.             void* user_data) {
  1705.     return functions->IterateOverHeap(this, object_filter, heap_object_callback, user_data);
  1706.   }
  1707.  
  1708.   jvmtiError IterateOverInstancesOfClass(jclass klass,
  1709.             jvmtiHeapObjectFilter object_filter,
  1710.             jvmtiHeapObjectCallback heap_object_callback,
  1711.             void* user_data) {
  1712.     return functions->IterateOverInstancesOfClass(this, klass, object_filter, heap_object_callback, user_data);
  1713.   }
  1714.  
  1715.   jvmtiError GetObjectsWithTags(jint tag_count,
  1716.             const jlong* tags,
  1717.             jint* count_ptr,
  1718.             jobject** object_result_ptr,
  1719.             jlong** tag_result_ptr) {
  1720.     return functions->GetObjectsWithTags(this, tag_count, tags, count_ptr, object_result_ptr, tag_result_ptr);
  1721.   }
  1722.  
  1723.   jvmtiError GetLocalObject(jthread thread,
  1724.             jint depth,
  1725.             jint slot,
  1726.             jobject* value_ptr) {
  1727.     return functions->GetLocalObject(this, thread, depth, slot, value_ptr);
  1728.   }
  1729.  
  1730.   jvmtiError GetLocalInt(jthread thread,
  1731.             jint depth,
  1732.             jint slot,
  1733.             jint* value_ptr) {
  1734.     return functions->GetLocalInt(this, thread, depth, slot, value_ptr);
  1735.   }
  1736.  
  1737.   jvmtiError GetLocalLong(jthread thread,
  1738.             jint depth,
  1739.             jint slot,
  1740.             jlong* value_ptr) {
  1741.     return functions->GetLocalLong(this, thread, depth, slot, value_ptr);
  1742.   }
  1743.  
  1744.   jvmtiError GetLocalFloat(jthread thread,
  1745.             jint depth,
  1746.             jint slot,
  1747.             jfloat* value_ptr) {
  1748.     return functions->GetLocalFloat(this, thread, depth, slot, value_ptr);
  1749.   }
  1750.  
  1751.   jvmtiError GetLocalDouble(jthread thread,
  1752.             jint depth,
  1753.             jint slot,
  1754.             jdouble* value_ptr) {
  1755.     return functions->GetLocalDouble(this, thread, depth, slot, value_ptr);
  1756.   }
  1757.  
  1758.   jvmtiError SetLocalObject(jthread thread,
  1759.             jint depth,
  1760.             jint slot,
  1761.             jobject value) {
  1762.     return functions->SetLocalObject(this, thread, depth, slot, value);
  1763.   }
  1764.  
  1765.   jvmtiError SetLocalInt(jthread thread,
  1766.             jint depth,
  1767.             jint slot,
  1768.             jint value) {
  1769.     return functions->SetLocalInt(this, thread, depth, slot, value);
  1770.   }
  1771.  
  1772.   jvmtiError SetLocalLong(jthread thread,
  1773.             jint depth,
  1774.             jint slot,
  1775.             jlong value) {
  1776.     return functions->SetLocalLong(this, thread, depth, slot, value);
  1777.   }
  1778.  
  1779.   jvmtiError SetLocalFloat(jthread thread,
  1780.             jint depth,
  1781.             jint slot,
  1782.             jfloat value) {
  1783.     return functions->SetLocalFloat(this, thread, depth, slot, value);
  1784.   }
  1785.  
  1786.   jvmtiError SetLocalDouble(jthread thread,
  1787.             jint depth,
  1788.             jint slot,
  1789.             jdouble value) {
  1790.     return functions->SetLocalDouble(this, thread, depth, slot, value);
  1791.   }
  1792.  
  1793.   jvmtiError SetBreakpoint(jmethodID method,
  1794.             jlocation location) {
  1795.     return functions->SetBreakpoint(this, method, location);
  1796.   }
  1797.  
  1798.   jvmtiError ClearBreakpoint(jmethodID method,
  1799.             jlocation location) {
  1800.     return functions->ClearBreakpoint(this, method, location);
  1801.   }
  1802.  
  1803.   jvmtiError SetFieldAccessWatch(jclass klass,
  1804.             jfieldID field) {
  1805.     return functions->SetFieldAccessWatch(this, klass, field);
  1806.   }
  1807.  
  1808.   jvmtiError ClearFieldAccessWatch(jclass klass,
  1809.             jfieldID field) {
  1810.     return functions->ClearFieldAccessWatch(this, klass, field);
  1811.   }
  1812.  
  1813.   jvmtiError SetFieldModificationWatch(jclass klass,
  1814.             jfieldID field) {
  1815.     return functions->SetFieldModificationWatch(this, klass, field);
  1816.   }
  1817.  
  1818.   jvmtiError ClearFieldModificationWatch(jclass klass,
  1819.             jfieldID field) {
  1820.     return functions->ClearFieldModificationWatch(this, klass, field);
  1821.   }
  1822.  
  1823.   jvmtiError GetLoadedClasses(jint* class_count_ptr,
  1824.             jclass** classes_ptr) {
  1825.     return functions->GetLoadedClasses(this, class_count_ptr, classes_ptr);
  1826.   }
  1827.  
  1828.   jvmtiError GetClassLoaderClasses(jobject initiating_loader,
  1829.             jint* class_count_ptr,
  1830.             jclass** classes_ptr) {
  1831.     return functions->GetClassLoaderClasses(this, initiating_loader, class_count_ptr, classes_ptr);
  1832.   }
  1833.  
  1834.   jvmtiError GetClassSignature(jclass klass,
  1835.             char** signature_ptr,
  1836.             char** generic_ptr) {
  1837.     return functions->GetClassSignature(this, klass, signature_ptr, generic_ptr);
  1838.   }
  1839.  
  1840.   jvmtiError GetClassStatus(jclass klass,
  1841.             jint* status_ptr) {
  1842.     return functions->GetClassStatus(this, klass, status_ptr);
  1843.   }
  1844.  
  1845.   jvmtiError GetSourceFileName(jclass klass,
  1846.             char** source_name_ptr) {
  1847.     return functions->GetSourceFileName(this, klass, source_name_ptr);
  1848.   }
  1849.  
  1850.   jvmtiError GetClassModifiers(jclass klass,
  1851.             jint* modifiers_ptr) {
  1852.     return functions->GetClassModifiers(this, klass, modifiers_ptr);
  1853.   }
  1854.  
  1855.   jvmtiError GetClassMethods(jclass klass,
  1856.             jint* method_count_ptr,
  1857.             jmethodID** methods_ptr) {
  1858.     return functions->GetClassMethods(this, klass, method_count_ptr, methods_ptr);
  1859.   }
  1860.  
  1861.   jvmtiError GetClassFields(jclass klass,
  1862.             jint* field_count_ptr,
  1863.             jfieldID** fields_ptr) {
  1864.     return functions->GetClassFields(this, klass, field_count_ptr, fields_ptr);
  1865.   }
  1866.  
  1867.   jvmtiError GetImplementedInterfaces(jclass klass,
  1868.             jint* interface_count_ptr,
  1869.             jclass** interfaces_ptr) {
  1870.     return functions->GetImplementedInterfaces(this, klass, interface_count_ptr, interfaces_ptr);
  1871.   }
  1872.  
  1873.   jvmtiError IsInterface(jclass klass,
  1874.             jboolean* is_interface_ptr) {
  1875.     return functions->IsInterface(this, klass, is_interface_ptr);
  1876.   }
  1877.  
  1878.   jvmtiError IsArrayClass(jclass klass,
  1879.             jboolean* is_array_class_ptr) {
  1880.     return functions->IsArrayClass(this, klass, is_array_class_ptr);
  1881.   }
  1882.  
  1883.   jvmtiError GetClassLoader(jclass klass,
  1884.             jobject* classloader_ptr) {
  1885.     return functions->GetClassLoader(this, klass, classloader_ptr);
  1886.   }
  1887.  
  1888.   jvmtiError GetSourceDebugExtension(jclass klass,
  1889.             char** source_debug_extension_ptr) {
  1890.     return functions->GetSourceDebugExtension(this, klass, source_debug_extension_ptr);
  1891.   }
  1892.  
  1893.   jvmtiError RedefineClasses(jint class_count,
  1894.             const jvmtiClassDefinition* class_definitions) {
  1895.     return functions->RedefineClasses(this, class_count, class_definitions);
  1896.   }
  1897.  
  1898.   jvmtiError GetObjectSize(jobject object,
  1899.             jlong* size_ptr) {
  1900.     return functions->GetObjectSize(this, object, size_ptr);
  1901.   }
  1902.  
  1903.   jvmtiError GetObjectHashCode(jobject object,
  1904.             jint* hash_code_ptr) {
  1905.     return functions->GetObjectHashCode(this, object, hash_code_ptr);
  1906.   }
  1907.  
  1908.   jvmtiError GetObjectMonitorUsage(jobject object,
  1909.             jvmtiMonitorUsage* info_ptr) {
  1910.     return functions->GetObjectMonitorUsage(this, object, info_ptr);
  1911.   }
  1912.  
  1913.   jvmtiError GetFieldName(jclass klass,
  1914.             jfieldID field,
  1915.             char** name_ptr,
  1916.             char** signature_ptr,
  1917.             char** generic_ptr) {
  1918.     return functions->GetFieldName(this, klass, field, name_ptr, signature_ptr, generic_ptr);
  1919.   }
  1920.  
  1921.   jvmtiError GetFieldDeclaringClass(jclass klass,
  1922.             jfieldID field,
  1923.             jclass* declaring_class_ptr) {
  1924.     return functions->GetFieldDeclaringClass(this, klass, field, declaring_class_ptr);
  1925.   }
  1926.  
  1927.   jvmtiError GetFieldModifiers(jclass klass,
  1928.             jfieldID field,
  1929.             jint* modifiers_ptr) {
  1930.     return functions->GetFieldModifiers(this, klass, field, modifiers_ptr);
  1931.   }
  1932.  
  1933.   jvmtiError IsFieldSynthetic(jclass klass,
  1934.             jfieldID field,
  1935.             jboolean* is_synthetic_ptr) {
  1936.     return functions->IsFieldSynthetic(this, klass, field, is_synthetic_ptr);
  1937.   }
  1938.  
  1939.   jvmtiError GetMethodName(jmethodID method,
  1940.             char** name_ptr,
  1941.             char** signature_ptr,
  1942.             char** generic_ptr) {
  1943.     return functions->GetMethodName(this, method, name_ptr, signature_ptr, generic_ptr);
  1944.   }
  1945.  
  1946.   jvmtiError GetMethodDeclaringClass(jmethodID method,
  1947.             jclass* declaring_class_ptr) {
  1948.     return functions->GetMethodDeclaringClass(this, method, declaring_class_ptr);
  1949.   }
  1950.  
  1951.   jvmtiError GetMethodModifiers(jmethodID method,
  1952.             jint* modifiers_ptr) {
  1953.     return functions->GetMethodModifiers(this, method, modifiers_ptr);
  1954.   }
  1955.  
  1956.   jvmtiError GetMaxLocals(jmethodID method,
  1957.             jint* max_ptr) {
  1958.     return functions->GetMaxLocals(this, method, max_ptr);
  1959.   }
  1960.  
  1961.   jvmtiError GetArgumentsSize(jmethodID method,
  1962.             jint* size_ptr) {
  1963.     return functions->GetArgumentsSize(this, method, size_ptr);
  1964.   }
  1965.  
  1966.   jvmtiError GetLineNumberTable(jmethodID method,
  1967.             jint* entry_count_ptr,
  1968.             jvmtiLineNumberEntry** table_ptr) {
  1969.     return functions->GetLineNumberTable(this, method, entry_count_ptr, table_ptr);
  1970.   }
  1971.  
  1972.   jvmtiError GetMethodLocation(jmethodID method,
  1973.             jlocation* start_location_ptr,
  1974.             jlocation* end_location_ptr) {
  1975.     return functions->GetMethodLocation(this, method, start_location_ptr, end_location_ptr);
  1976.   }
  1977.  
  1978.   jvmtiError GetLocalVariableTable(jmethodID method,
  1979.             jint* entry_count_ptr,
  1980.             jvmtiLocalVariableEntry** table_ptr) {
  1981.     return functions->GetLocalVariableTable(this, method, entry_count_ptr, table_ptr);
  1982.   }
  1983.  
  1984.   jvmtiError GetBytecodes(jmethodID method,
  1985.             jint* bytecode_count_ptr,
  1986.             unsigned char** bytecodes_ptr) {
  1987.     return functions->GetBytecodes(this, method, bytecode_count_ptr, bytecodes_ptr);
  1988.   }
  1989.  
  1990.   jvmtiError IsMethodNative(jmethodID method,
  1991.             jboolean* is_native_ptr) {
  1992.     return functions->IsMethodNative(this, method, is_native_ptr);
  1993.   }
  1994.  
  1995.   jvmtiError IsMethodSynthetic(jmethodID method,
  1996.             jboolean* is_synthetic_ptr) {
  1997.     return functions->IsMethodSynthetic(this, method, is_synthetic_ptr);
  1998.   }
  1999.  
  2000.   jvmtiError IsMethodObsolete(jmethodID method,
  2001.             jboolean* is_obsolete_ptr) {
  2002.     return functions->IsMethodObsolete(this, method, is_obsolete_ptr);
  2003.   }
  2004.  
  2005.   jvmtiError CreateRawMonitor(const char* name,
  2006.             jrawMonitorID* monitor_ptr) {
  2007.     return functions->CreateRawMonitor(this, name, monitor_ptr);
  2008.   }
  2009.  
  2010.   jvmtiError DestroyRawMonitor(jrawMonitorID monitor) {
  2011.     return functions->DestroyRawMonitor(this, monitor);
  2012.   }
  2013.  
  2014.   jvmtiError RawMonitorEnter(jrawMonitorID monitor) {
  2015.     return functions->RawMonitorEnter(this, monitor);
  2016.   }
  2017.  
  2018.   jvmtiError RawMonitorExit(jrawMonitorID monitor) {
  2019.     return functions->RawMonitorExit(this, monitor);
  2020.   }
  2021.  
  2022.   jvmtiError RawMonitorWait(jrawMonitorID monitor,
  2023.             jlong millis) {
  2024.     return functions->RawMonitorWait(this, monitor, millis);
  2025.   }
  2026.  
  2027.   jvmtiError RawMonitorNotify(jrawMonitorID monitor) {
  2028.     return functions->RawMonitorNotify(this, monitor);
  2029.   }
  2030.  
  2031.   jvmtiError RawMonitorNotifyAll(jrawMonitorID monitor) {
  2032.     return functions->RawMonitorNotifyAll(this, monitor);
  2033.   }
  2034.  
  2035.   jvmtiError SetJNIFunctionTable(const jniNativeInterface* function_table) {
  2036.     return functions->SetJNIFunctionTable(this, function_table);
  2037.   }
  2038.  
  2039.   jvmtiError GetJNIFunctionTable(jniNativeInterface** function_table) {
  2040.     return functions->GetJNIFunctionTable(this, function_table);
  2041.   }
  2042.  
  2043.   jvmtiError SetEventCallbacks(const jvmtiEventCallbacks* callbacks,
  2044.             jint size_of_callbacks) {
  2045.     return functions->SetEventCallbacks(this, callbacks, size_of_callbacks);
  2046.   }
  2047.  
  2048.   jvmtiError SetEventNotificationMode(jvmtiEventMode mode,
  2049.             jvmtiEvent event_type,
  2050.             jthread event_thread,
  2051.              ...) {
  2052.     return functions->SetEventNotificationMode(this, mode, event_type, event_thread);
  2053.   }
  2054.  
  2055.   jvmtiError GenerateEvents(jvmtiEvent event_type) {
  2056.     return functions->GenerateEvents(this, event_type);
  2057.   }
  2058.  
  2059.   jvmtiError GetExtensionFunctions(jint* extension_count_ptr,
  2060.             jvmtiExtensionFunctionInfo** extensions) {
  2061.     return functions->GetExtensionFunctions(this, extension_count_ptr, extensions);
  2062.   }
  2063.  
  2064.   jvmtiError GetExtensionEvents(jint* extension_count_ptr,
  2065.             jvmtiExtensionEventInfo** extensions) {
  2066.     return functions->GetExtensionEvents(this, extension_count_ptr, extensions);
  2067.   }
  2068.  
  2069.   jvmtiError SetExtensionEventCallback(jint extension_event_index,
  2070.             jvmtiExtensionEvent callback) {
  2071.     return functions->SetExtensionEventCallback(this, extension_event_index, callback);
  2072.   }
  2073.  
  2074.   jvmtiError GetPotentialCapabilities(jvmtiCapabilities* capabilities_ptr) {
  2075.     return functions->GetPotentialCapabilities(this, capabilities_ptr);
  2076.   }
  2077.  
  2078.   jvmtiError AddCapabilities(const jvmtiCapabilities* capabilities_ptr) {
  2079.     return functions->AddCapabilities(this, capabilities_ptr);
  2080.   }
  2081.  
  2082.   jvmtiError RelinquishCapabilities(const jvmtiCapabilities* capabilities_ptr) {
  2083.     return functions->RelinquishCapabilities(this, capabilities_ptr);
  2084.   }
  2085.  
  2086.   jvmtiError GetCapabilities(jvmtiCapabilities* capabilities_ptr) {
  2087.     return functions->GetCapabilities(this, capabilities_ptr);
  2088.   }
  2089.  
  2090.   jvmtiError GetCurrentThreadCpuTimerInfo(jvmtiTimerInfo* info_ptr) {
  2091.     return functions->GetCurrentThreadCpuTimerInfo(this, info_ptr);
  2092.   }
  2093.  
  2094.   jvmtiError GetCurrentThreadCpuTime(jlong* nanos_ptr) {
  2095.     return functions->GetCurrentThreadCpuTime(this, nanos_ptr);
  2096.   }
  2097.  
  2098.   jvmtiError GetThreadCpuTimerInfo(jvmtiTimerInfo* info_ptr) {
  2099.     return functions->GetThreadCpuTimerInfo(this, info_ptr);
  2100.   }
  2101.  
  2102.   jvmtiError GetThreadCpuTime(jthread thread,
  2103.             jlong* nanos_ptr) {
  2104.     return functions->GetThreadCpuTime(this, thread, nanos_ptr);
  2105.   }
  2106.  
  2107.   jvmtiError GetTimerInfo(jvmtiTimerInfo* info_ptr) {
  2108.     return functions->GetTimerInfo(this, info_ptr);
  2109.   }
  2110.  
  2111.   jvmtiError GetTime(jlong* nanos_ptr) {
  2112.     return functions->GetTime(this, nanos_ptr);
  2113.   }
  2114.  
  2115.   jvmtiError GetAvailableProcessors(jint* processor_count_ptr) {
  2116.     return functions->GetAvailableProcessors(this, processor_count_ptr);
  2117.   }
  2118.  
  2119.   jvmtiError AddToBootstrapClassLoaderSearch(const char* segment) {
  2120.     return functions->AddToBootstrapClassLoaderSearch(this, segment);
  2121.   }
  2122.  
  2123.   jvmtiError GetSystemProperties(jint* count_ptr,
  2124.             char*** property_ptr) {
  2125.     return functions->GetSystemProperties(this, count_ptr, property_ptr);
  2126.   }
  2127.  
  2128.   jvmtiError GetSystemProperty(const char* property,
  2129.             char** value_ptr) {
  2130.     return functions->GetSystemProperty(this, property, value_ptr);
  2131.   }
  2132.  
  2133.   jvmtiError SetSystemProperty(const char* property,
  2134.             const char* value) {
  2135.     return functions->SetSystemProperty(this, property, value);
  2136.   }
  2137.  
  2138.   jvmtiError GetPhase(jvmtiPhase* phase_ptr) {
  2139.     return functions->GetPhase(this, phase_ptr);
  2140.   }
  2141.  
  2142.   jvmtiError DisposeEnvironment() {
  2143.     return functions->DisposeEnvironment(this);
  2144.   }
  2145.  
  2146.   jvmtiError SetEnvironmentLocalStorage(const void* data) {
  2147.     return functions->SetEnvironmentLocalStorage(this, data);
  2148.   }
  2149.  
  2150.   jvmtiError GetEnvironmentLocalStorage(void** data_ptr) {
  2151.     return functions->GetEnvironmentLocalStorage(this, data_ptr);
  2152.   }
  2153.  
  2154.   jvmtiError GetVersionNumber(jint* version_ptr) {
  2155.     return functions->GetVersionNumber(this, version_ptr);
  2156.   }
  2157.  
  2158.   jvmtiError GetErrorName(jvmtiError error,
  2159.             char** name_ptr) {
  2160.     return functions->GetErrorName(this, error, name_ptr);
  2161.   }
  2162.  
  2163.   jvmtiError SetVerboseFlag(jvmtiVerboseFlag flag,
  2164.             jboolean value) {
  2165.     return functions->SetVerboseFlag(this, flag, value);
  2166.   }
  2167.  
  2168.   jvmtiError GetJLocationFormat(jvmtiJlocationFormat* format_ptr) {
  2169.     return functions->GetJLocationFormat(this, format_ptr);
  2170.   }
  2171.  
  2172. #endif /* __cplusplus */
  2173. };
  2174.  
  2175.  
  2176. #ifdef __cplusplus
  2177. } /* extern "C" */
  2178. #endif /* __cplusplus */
  2179.  
  2180. #endif /* !_JAVA_JVMTI_H_ */
  2181.  
  2182.