Revision 17300

View differences:

trunk/libraries/libjni-addo/include/jni_w32/jni.h
1 1
/*
2
 * @(#)jni.h	1.55 03/01/23
2
 * @(#)jni.h	1.56 03/12/19
3 3
 *
4
 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
4
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
5 5
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6 6
 */
7 7

  
trunk/libraries/libjni-addo/include/jni_w32/jni_md.h
1 1
/*
2
 * @(#)jni_md.h	1.13 03/01/23
2
 * @(#)jni_md.h	1.14 03/12/19
3 3
 *
4
 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
4
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
5 5
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6 6
 */
7 7

  
trunk/libraries/libjni-addo/include/jni_w32/jdwpTransport.h
1
/*
2
 * @(#)jdwpTransport.h	1.7 03/12/19
3
 *
4
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
5
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6
 */
7

  
8
/*
9
 * Java Debug Wire Protocol Transport Service Provider Interface.
10
 */
11

  
12
#ifndef JDWPTRANSPORT_H
13
#define JDWPTRANSPORT_H
14

  
15
#include "jni.h"
16

  
17
enum {
18
    JDWPTRANSPORT_VERSION_1_0 = 0x00010000
19
};
20

  
21
#ifdef __cplusplus
22
extern "C" {
23
#endif
24

  
25
struct jdwpTransportNativeInterface_;
26

  
27
struct _jdwpTransportEnv;
28

  
29
#ifdef __cplusplus
30
typedef _jdwpTransportEnv jdwpTransportEnv;
31
#else
32
typedef const struct jdwpTransportNativeInterface_ *jdwpTransportEnv;
33
#endif /* __cplusplus */
34

  
35
/*
36
 * Errors. Universal errors with JVMTI/JVMDI equivalents keep the
37
 * values the same.
38
 */
39
typedef enum {
40
    JDWPTRANSPORT_ERROR_NONE = 0,
41
    JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT = 103,
42
    JDWPTRANSPORT_ERROR_OUT_OF_MEMORY = 110,
43
    JDWPTRANSPORT_ERROR_INTERNAL = 113,
44
    JDWPTRANSPORT_ERROR_ILLEGAL_STATE = 201,
45
    JDWPTRANSPORT_ERROR_IO_ERROR = 202,
46
    JDWPTRANSPORT_ERROR_TIMEOUT = 203,
47
    JDWPTRANSPORT_ERROR_MSG_NOT_AVAILABLE = 204
48
} jdwpTransportError;
49
    
50

  
51
/*
52
 * Structure to define capabilities
53
 */
54
typedef struct {
55
    unsigned int can_timeout_attach     :1;
56
    unsigned int can_timeout_accept     :1;
57
    unsigned int can_timeout_handshake  :1;
58
    unsigned int reserved3              :1;
59
    unsigned int reserved4              :1;
60
    unsigned int reserved5              :1;
61
    unsigned int reserved6              :1;
62
    unsigned int reserved7              :1;
63
    unsigned int reserved8              :1;
64
    unsigned int reserved9              :1;
65
    unsigned int reserved10             :1;
66
    unsigned int reserved11             :1;
67
    unsigned int reserved12             :1;
68
    unsigned int reserved13             :1;
69
    unsigned int reserved14		:1;
70
    unsigned int reserved15		:1;
71
} JDWPTransportCapabilities;
72

  
73

  
74
/*
75
 * Structures to define packet layout.
76
 * 
77
 * See: http://java.sun.com/j2se/1.5/docs/guide/jpda/jdwp-spec.html
78
 */
79

  
80
enum {
81
    JDWPTRANSPORT_FLAGS_NONE	 = 0x0,
82
    JDWPTRANSPORT_FLAGS_REPLY	 = 0x80
83
};
84

  
85
typedef struct {
86
    jint len; 
87
    jint id;
88
    jbyte flags;
89
    jbyte cmdSet;
90
    jbyte cmd;
91
    jbyte *data;
92
} jdwpCmdPacket;
93

  
94
typedef struct {
95
    jint len;
96
    jint id;
97
    jbyte flags;
98
    jshort errorCode;
99
    jbyte *data;
100
} jdwpReplyPacket;
101

  
102
typedef struct {
103
    union {
104
        jdwpCmdPacket cmd;
105
        jdwpReplyPacket reply;
106
    } type;
107
} jdwpPacket;
108

  
109
/*
110
 * JDWP functions called by the transport.
111
 */
112
typedef struct jdwpTransportCallback {
113
    void *(*alloc)(jint numBytes);   /* Call this for all allocations */
114
    void (*free)(void *buffer);      /* Call this for all deallocations */
115
} jdwpTransportCallback;
116

  
117
typedef jint (JNICALL *jdwpTransport_OnLoad_t)(JavaVM *jvm,
118
					       jdwpTransportCallback *callback,
119
					       jint version,
120
                                      	       jdwpTransportEnv** env);
121

  
122

  
123

  
124
/* Function Interface */
125

  
126
struct jdwpTransportNativeInterface_ {
127
    /*  1 :  RESERVED */
128
    void *reserved1;
129

  
130
    /*	2 : Get Capabilities */
131
    jdwpTransportError (JNICALL *GetCapabilities)(jdwpTransportEnv* env,
132
	 JDWPTransportCapabilities *capabilities_ptr);
133

  
134
    /*  3 : Attach */
135
    jdwpTransportError (JNICALL *Attach)(jdwpTransportEnv* env,
136
	const char* address,
137
	jlong attach_timeout,
138
	jlong handshake_timeout);
139

  
140
    /*  4: StartListening */
141
    jdwpTransportError (JNICALL *StartListening)(jdwpTransportEnv* env,
142
	const char* address, 
143
	char** actual_address);
144

  
145
    /*  5: StopListening */
146
    jdwpTransportError (JNICALL *StopListening)(jdwpTransportEnv* env);
147

  
148
    /*  6: Accept */
149
    jdwpTransportError (JNICALL *Accept)(jdwpTransportEnv* env,
150
	jlong accept_timeout, 
151
	jlong handshake_timeout);
152

  
153
    /*  7: IsOpen */
154
    jboolean (JNICALL *IsOpen)(jdwpTransportEnv* env);
155

  
156
    /*  8: Close */
157
    jdwpTransportError (JNICALL *Close)(jdwpTransportEnv* env);
158

  
159
    /*  9: ReadPacket */
160
    jdwpTransportError (JNICALL *ReadPacket)(jdwpTransportEnv* env,
161
	jdwpPacket *pkt);
162

  
163
    /*  10: Write Packet */
164
    jdwpTransportError (JNICALL *WritePacket)(jdwpTransportEnv* env,
165
	const jdwpPacket* pkt);
166

  
167
    /*  11:  GetLastError */
168
    jdwpTransportError (JNICALL *GetLastError)(jdwpTransportEnv* env,
169
	char** error);
170

  
171
};
172

  
173

  
174
/*
175
 * Use inlined functions so that C++ code can use syntax such as
176
 *	env->Attach("mymachine:5000", 10*1000, 0);
177
 *
178
 * rather than using C's :-
179
 *
180
 *	(*env)->Attach(env, "mymachine:5000", 10*1000, 0);
181
 */
182
struct _jdwpTransportEnv {
183
    const struct jdwpTransportNativeInterface_ *functions;
184
#ifdef __cplusplus
185

  
186
    jdwpTransportError GetCapabilities(JDWPTransportCapabilities *capabilities_ptr) {
187
	return functions->GetCapabilities(this, capabilities_ptr);
188
    }
189

  
190
    jdwpTransportError Attach(const char* address, jlong attach_timeout,
191
        	jlong handshake_timeout) {
192
	return functions->Attach(this, address, attach_timeout, handshake_timeout);
193
    }
194

  
195
    jdwpTransportError StartListening(const char* address,
196
        	char** actual_address) {
197
	return functions->StartListening(this, address, actual_address);
198
    }
199

  
200
    jdwpTransportError StopListening(void) {
201
	return functions->StopListening(this);
202
    }
203

  
204
    jdwpTransportError Accept(jlong accept_timeout, jlong handshake_timeout) {
205
	return functions->Accept(this, accept_timeout, handshake_timeout);
206
    }
207

  
208
    jboolean IsOpen(void) {
209
        return functions->IsOpen(this);
210
    }
211

  
212
    jdwpTransportError Close(void) {
213
        return functions->Close(this);
214
    }
215

  
216
    jdwpTransportError ReadPacket(jdwpPacket *pkt) {
217
	return functions->ReadPacket(this, pkt);
218
    }
219

  
220
    jdwpTransportError WritePacket(const jdwpPacket* pkt) {
221
	return functions->WritePacket(this, pkt);
222
    }
223

  
224
    jdwpTransportError GetLastError(char** error) {
225
	return functions->GetLastError(this, error);
226
    }
227

  
228

  
229
#endif /* __cplusplus */
230
};
231

  
232
#ifdef __cplusplus
233
} /* extern "C" */
234
#endif /* __cplusplus */
235

  
236
#endif /* JDWPTRANSPORT_H */
237

  
trunk/libraries/libjni-addo/include/jni_w32/jawt.h
1
/*
2
 * @(#)jawt.h	1.10 03/12/19
3
 *
4
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
5
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6
 */
7

  
8
#ifndef _JAVASOFT_JAWT_H_
9
#define _JAVASOFT_JAWT_H_
10

  
11
#include "jni.h"
12

  
13
#ifdef __cplusplus
14
extern "C" {
15
#endif
16

  
17
/*
18
 * AWT native interface (new in JDK 1.3)
19
 *
20
 * The AWT native interface allows a native C or C++ application a means
21
 * by which to access native structures in AWT.  This is to facilitate moving
22
 * legacy C and C++ applications to Java and to target the needs of the
23
 * community who, at present, wish to do their own native rendering to canvases
24
 * for performance reasons.  Standard extensions such as Java3D also require a
25
 * means to access the underlying native data structures of AWT.
26
 *
27
 * There may be future extensions to this API depending on demand.
28
 *
29
 * A VM does not have to implement this API in order to pass the JCK.
30
 * It is recommended, however, that this API is implemented on VMs that support
31
 * standard extensions, such as Java3D.
32
 *
33
 * Since this is a native API, any program which uses it cannot be considered
34
 * 100% pure java.
35
 */
36

  
37
/*
38
 * AWT Native Drawing Surface (JAWT_DrawingSurface).
39
 *
40
 * For each platform, there is a native drawing surface structure.  This
41
 * platform-specific structure can be found in jawt_md.h.  It is recommended
42
 * that additional platforms follow the same model.  It is also recommended
43
 * that VMs on Win32 and Solaris support the existing structures in jawt_md.h.
44
 *
45
 *******************
46
 * EXAMPLE OF USAGE:
47
 *******************
48
 *
49
 * In Win32, a programmer wishes to access the HWND of a canvas to perform
50
 * native rendering into it.  The programmer has declared the paint() method
51
 * for their canvas subclass to be native:
52
 *
53
 *
54
 * MyCanvas.java:
55
 *
56
 * import java.awt.*;
57
 *
58
 * public class MyCanvas extends Canvas {
59
 *
60
 *     static {
61
 *         System.loadLibrary("mylib");
62
 *     }
63
 *
64
 *     public native void paint(Graphics g);
65
 * }
66
 *
67
 *
68
 * myfile.c:
69
 *
70
 * #include "jawt_md.h"
71
 * #include <assert.h>
72
 *
73
 * JNIEXPORT void JNICALL
74
 * Java_MyCanvas_paint(JNIEnv* env, jobject canvas, jobject graphics)
75
 * {
76
 *     JAWT awt;
77
 *     JAWT_DrawingSurface* ds;
78
 *     JAWT_DrawingSurfaceInfo* dsi;
79
 *     JAWT_Win32DrawingSurfaceInfo* dsi_win;
80
 *     jboolean result;
81
 *     jint lock;
82
 *
83
 *     // Get the AWT
84
 *     awt.version = JAWT_VERSION_1_3;
85
 *     result = JAWT_GetAWT(env, &awt);
86
 *     assert(result != JNI_FALSE);
87
 *
88
 *     // Get the drawing surface
89
 *     ds = awt.GetDrawingSurface(env, canvas);
90
 *     assert(ds != NULL);
91
 *
92
 *     // Lock the drawing surface
93
 *     lock = ds->Lock(ds);
94
 *     assert((lock & JAWT_LOCK_ERROR) == 0);
95
 *
96
 *     // Get the drawing surface info
97
 *     dsi = ds->GetDrawingSurfaceInfo(ds);
98
 *
99
 *     // Get the platform-specific drawing info
100
 *     dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
101
 *
102
 *     //////////////////////////////
103
 *     // !!! DO PAINTING HERE !!! //
104
 *     //////////////////////////////
105
 *
106
 *     // Free the drawing surface info
107
 *     ds->FreeDrawingSurfaceInfo(dsi);
108
 *
109
 *     // Unlock the drawing surface
110
 *     ds->Unlock(ds);
111
 *
112
 *     // Free the drawing surface
113
 *     awt.FreeDrawingSurface(ds);
114
 * }
115
 *
116
 */
117

  
118
/*
119
 * JAWT_Rectangle
120
 * Structure for a native rectangle.
121
 */
122
typedef struct jawt_Rectangle {
123
    jint x;
124
    jint y;
125
    jint width;
126
    jint height;
127
} JAWT_Rectangle;
128

  
129
struct jawt_DrawingSurface;
130

  
131
/*
132
 * JAWT_DrawingSurfaceInfo
133
 * Structure for containing the underlying drawing information of a component.
134
 */
135
typedef struct jawt_DrawingSurfaceInfo {
136
    /*
137
     * Pointer to the platform-specific information.  This can be safely
138
     * cast to a JAWT_Win32DrawingSurfaceInfo on Windows or a
139
     * JAWT_X11DrawingSurfaceInfo on Solaris.  See jawt_md.h for details.
140
     */
141
    void* platformInfo;
142
    /* Cached pointer to the underlying drawing surface */
143
    struct jawt_DrawingSurface* ds;
144
    /* Bounding rectangle of the drawing surface */
145
    JAWT_Rectangle bounds;
146
    /* Number of rectangles in the clip */
147
    jint clipSize;
148
    /* Clip rectangle array */
149
    JAWT_Rectangle* clip;
150
} JAWT_DrawingSurfaceInfo;
151

  
152
#define JAWT_LOCK_ERROR                 0x00000001
153
#define JAWT_LOCK_CLIP_CHANGED          0x00000002
154
#define JAWT_LOCK_BOUNDS_CHANGED        0x00000004
155
#define JAWT_LOCK_SURFACE_CHANGED       0x00000008
156

  
157
/*
158
 * JAWT_DrawingSurface
159
 * Structure for containing the underlying drawing information of a component.
160
 * All operations on a JAWT_DrawingSurface MUST be performed from the same
161
 * thread as the call to GetDrawingSurface.
162
 */
163
typedef struct jawt_DrawingSurface {
164
    /*
165
     * Cached reference to the Java environment of the calling thread.
166
     * If Lock(), Unlock(), GetDrawingSurfaceInfo() or
167
     * FreeDrawingSurfaceInfo() are called from a different thread,
168
     * this data member should be set before calling those functions.
169
     */
170
    JNIEnv* env;
171
    /* Cached reference to the target object */
172
    jobject target;
173
    /*
174
     * Lock the surface of the target component for native rendering.
175
     * When finished drawing, the surface must be unlocked with
176
     * Unlock().  This function returns a bitmask with one or more of the
177
     * following values:
178
     *
179
     * JAWT_LOCK_ERROR - When an error has occurred and the surface could not
180
     * be locked.
181
     *
182
     * JAWT_LOCK_CLIP_CHANGED - When the clip region has changed.
183
     *
184
     * JAWT_LOCK_BOUNDS_CHANGED - When the bounds of the surface have changed.
185
     *
186
     * JAWT_LOCK_SURFACE_CHANGED - When the surface itself has changed
187
     */
188
    jint (JNICALL *Lock)
189
        (struct jawt_DrawingSurface* ds);
190
    /*
191
     * Get the drawing surface info.
192
     * The value returned may be cached, but the values may change if
193
     * additional calls to Lock() or Unlock() are made.
194
     * Lock() must be called before this can return a valid value.
195
     * Returns NULL if an error has occurred.
196
     * When finished with the returned value, FreeDrawingSurfaceInfo must be
197
     * called.
198
     */
199
    JAWT_DrawingSurfaceInfo* (JNICALL *GetDrawingSurfaceInfo)
200
        (struct jawt_DrawingSurface* ds);
201
    /*
202
     * Free the drawing surface info.
203
     */
204
    void (JNICALL *FreeDrawingSurfaceInfo)
205
        (JAWT_DrawingSurfaceInfo* dsi);
206
    /* 
207
     * Unlock the drawing surface of the target component for native rendering.
208
     */
209
    void (JNICALL *Unlock)
210
        (struct jawt_DrawingSurface* ds);
211
} JAWT_DrawingSurface;
212

  
213
/*
214
 * JAWT
215
 * Structure for containing native AWT functions.
216
 */
217
typedef struct jawt {
218
    /*
219
     * Version of this structure.  This must always be set before
220
     * calling JAWT_GetAWT()
221
     */
222
    jint version;
223
    /*
224
     * Return a drawing surface from a target jobject.  This value
225
     * may be cached.
226
     * Returns NULL if an error has occurred.
227
     * Target must be a java.awt.Component (should be a Canvas
228
     * or Window for native rendering).
229
     * FreeDrawingSurface() must be called when finished with the
230
     * returned JAWT_DrawingSurface.
231
     */
232
    JAWT_DrawingSurface* (JNICALL *GetDrawingSurface)
233
        (JNIEnv* env, jobject target);
234
    /*
235
     * Free the drawing surface allocated in GetDrawingSurface.
236
     */
237
    void (JNICALL *FreeDrawingSurface)
238
        (JAWT_DrawingSurface* ds);
239
    /*
240
     * Since 1.4
241
     * Locks the entire AWT for synchronization purposes
242
     */
243
    void (JNICALL *Lock)(JNIEnv* env);
244
    /*
245
     * Since 1.4
246
     * Unlocks the entire AWT for synchronization purposes
247
     */
248
    void (JNICALL *Unlock)(JNIEnv* env);
249
    /*
250
     * Since 1.4
251
     * Returns a reference to a java.awt.Component from a native
252
     * platform handle.  On Windows, this corresponds to an HWND;
253
     * on Solaris and Linux, this is a Drawable.  For other platforms,
254
     * see the appropriate machine-dependent header file for a description.
255
     * The reference returned by this function is a local
256
     * reference that is only valid in this environment.
257
     * This function returns a NULL reference if no component could be
258
     * found with matching platform information.
259
     */
260
    jobject (JNICALL *GetComponent)(JNIEnv* env, void* platformInfo);
261

  
262
} JAWT;
263

  
264
/*
265
 * Get the AWT native structure.  This function returns JNI_FALSE if
266
 * an error occurs.
267
 */
268
_JNI_IMPORT_OR_EXPORT_
269
jboolean JNICALL JAWT_GetAWT(JNIEnv* env, JAWT* awt);
270

  
271
#define JAWT_VERSION_1_3 0x00010003
272
#define JAWT_VERSION_1_4 0x00010004
273

  
274
#ifdef __cplusplus
275
} /* extern "C" */
276
#endif
277

  
278
#endif /* !_JAVASOFT_JAWT_H_ */
trunk/libraries/libjni-addo/include/jni_w32/jawt_md.h
1 1
/*
2
 * @(#)jawt_md.h	1.6 03/01/23
2
 * @(#)jawt_md.h	1.7 03/12/19
3 3
 *
4
 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
4
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
5 5
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6 6
 */
7 7

  
trunk/libraries/libjni-addo/include/jni_w32/jvmpi.h
1 1
/*
2
 * @(#)jvmpi.h	1.27 03/01/23
2
 * @(#)jvmpi.h	1.28 03/12/19
3 3
 *
4
 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
4
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
5 5
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6 6
 */
7 7

  
trunk/libraries/libjni-addo/include/jni_w32/jvmdi.h
1 1
/*
2
 * @(#)jvmdi.h	1.47 03/01/23
2
 * @(#)jvmdi.h	1.48 03/12/19
3 3
 *
4
 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
4
 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
5 5
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
6 6
 */
7 7

  
trunk/libraries/libjni-addo/include/jni_w32/jvmti.h
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, 
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff