2013-06-18 Richard Biener <rguenther@suse.de>
[official-gcc.git] / libjava / include / jvmpi.h
blob1af9617825a6da9b05a506bdf042cf6dfd38ee55
1 /* Copyright (C) 2000 Free Software Foundation
3 This file is part of libgcj.
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
7 details. */
9 /* Note: this file must be compilable by the C compiler (for now,
10 assuming GNU C is ok). This means you must never use `//'
11 comments, and all C++-specific code must be conditional on
12 __cplusplus. */
14 #ifndef __GCJ_JVMPI_H__
15 #define __GCJ_JVMPI_H__
17 #include <jni.h>
19 /* JVMPI version numbers. FIXME: this is a semi-random number. The
20 documentation doesn't say what it should be. */
21 #define JVMPI_VERSION_1 0x00020001
23 /* JVMPI return codes. FIXME: These are semi-random numbers. The
24 documentation doesn't say what they should be. */
25 #define JVMPI_SUCCESS 0
26 #define JVMPI_FAIL 1
27 #define JVMPI_NOT_AVAILABLE 2
29 /* An opaque pointer representing an object ID. */
30 struct _jobjectID;
31 typedef struct _jobjectID * jobjectID;
33 typedef struct
35 /* Source line number. */
36 jint lineno;
37 /* Method being executed. */
38 jmethodID method_id;
39 } JVMPI_CallFrame;
41 typedef struct
43 JNIEnv *env_id;
44 /* Number of frames in the call trace. */
45 jint num_frames;
46 /* An array of frames representing the trace. Callees first. */
47 JVMPI_CallFrame *frames;
48 } JVMPI_CallTrace;
50 typedef struct
52 /* Name of the field. */
53 char *field_name;
54 /* Signature of the field. */
55 char *field_signature;
56 } JVMPI_Field;
58 /* The documentation doesn't actually specify what the
59 JVMPI_DUMP_LEVEL macros should be defined to. Here's a reasonable
60 guess. */
61 #define JVMPI_DUMP_LEVEL_0 0
62 #define JVMPI_DUMP_LEVEL_1 1
63 #define JVMPI_DUMP_LEVEL_2 2
64 #define JVMPI_DUMP_LEVEL_3 3
66 typedef struct
68 /* One of JVMPI_DUMP_LEVEL_0, JVMPI_DUMP_LEVEL_1 or
69 JVMPI_DUMP_LEVEL_2. */
70 jint heap_dump_level;
71 } JVMPI_HeapDumpArg;
73 typedef struct
75 /* Offset from the beginning of the method. */
76 jint offset;
77 /* Line number from the beginning of the source file. */
78 jint lineno;
79 } JVMPI_Lineno;
81 typedef struct
83 /* Name of the method. */
84 char *method_name;
85 /* Signature of the method. */
86 char *method_signature;
87 /* Start line number from the beginning of the source file. */
88 jint start_lineno;
89 /* End line number from the beginning of the source file. */
90 jint end_lineno;
91 /* The method ID. */
92 jmethodID method_id;
93 } JVMPI_Method;
95 /* An opaque pointer representing a raw monitor. */
96 struct _JVMPI_RawMonitor;
97 typedef struct _JVMPI_RawMonitor *JVMPI_RawMonitor;
99 /* JVMPI event codes. FIXME: These are semi-random numbers. The
100 documentation doesn't say what they should be. */
101 #define JVMPI_EVENT_ARENA_DELETE 0
102 #define JVMPI_EVENT_ARENA_NEW 1
103 #define JVMPI_EVENT_CLASS_LOAD 2
104 #define JVMPI_EVENT_CLASS_LOAD_HOOK 3
105 #define JVMPI_EVENT_CLASS_UNLOAD 4
106 #define JVMPI_EVENT_COMPILED_METHOD_LOAD 5
107 #define JVMPI_EVENT_COMPILED_METHOD_UNLOAD 6
108 #define JVMPI_EVENT_DATA_DUMP_REQUEST 7
109 #define JVMPI_EVENT_DATA_RESET_REQUEST 8
110 #define JVMPI_EVENT_GC_FINISH 9
111 #define JVMPI_EVENT_GC_START 10
112 #define JVMPI_EVENT_HEAP_DUMP 11
113 #define JVMPI_EVENT_JNI_GLOBALREF_ALLOC 12
114 #define JVMPI_EVENT_JNI_GLOBALREF_FREE 13
115 #define JVMPI_EVENT_JNI_WEAK_GLOBALREF_ALLOC 14
116 #define JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE 15
117 #define JVMPI_EVENT_JVM_INIT_DONE 16
118 #define JVMPI_EVENT_JVM_SHUT_DOWN 17
119 #define JVMPI_EVENT_METHOD_ENTRY 18
120 #define JVMPI_EVENT_METHOD_ENTRY2 19
121 #define JVMPI_EVENT_METHOD_EXIT 20
122 #define JVMPI_EVENT_MONITOR_CONTENDED_ENTER 21
123 #define JVMPI_EVENT_MONITOR_CONTENDED_ENTERED 22
124 #define JVMPI_EVENT_MONITOR_CONTENDED_EXIT 23
125 #define JVMPI_EVENT_MONITOR_DUMP 24
126 #define JVMPI_EVENT_MONITOR_WAIT 25
127 #define JVMPI_EVENT_MONITOR_WAITED 26
128 #define JVMPI_EVENT_OBJECT_ALLOC 27
129 #define JVMPI_EVENT_OBJECT_DUMP 28
130 #define JVMPI_EVENT_OBJECT_FREE 29
131 #define JVMPI_EVENT_OBJECT_MOVE 30
132 #define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER 31
133 #define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED 32
134 #define JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT 33
135 #define JVMPI_EVENT_THREAD_END 34
136 #define JVMPI_EVENT_THREAD_START 35
137 #define JVMPI_EVENT_INSTRUCTION_START 36
140 typedef struct
142 /* Event type. */
143 jint event_type;
145 /* Evn where this event occurred. */
146 JNIEnv *env_id;
148 union
150 struct
152 char *class_name;
153 char *source_name;
154 jint num_interfaces;
155 jint num_methods;
156 JVMPI_Method *methods;
157 jint num_static_fields;
158 JVMPI_Field *statics;
159 jint num_instance_fields;
160 JVMPI_Field *instances;
161 jobjectID class_id;
162 } class_load;
164 struct
166 jobjectID class_id;
167 } class_unload;
169 struct
171 jint arena_id;
172 jobjectID class_id;
173 jint is_array;
174 jint size;
175 jobjectID obj_id;
176 } obj_alloc;
178 struct
180 char *thread_name;
181 char *group_name;
182 char *parent_name;
183 jobjectID thread_id;
184 JNIEnv *thread_env_id;
185 } thread_start;
187 } u;
189 } JVMPI_Event;
191 typedef struct
193 /* JVMPI version number. */
194 jint version;
196 /* Implemented by the user... */
197 void (*NotifyEvent) (JVMPI_Event *event);
199 /* Implemented by the runtime... */
200 jint (*EnableEvent) (jint event_type, void *arg);
201 jint (*DisableEvent) (jint event_type, void *arg);
202 jint (*RequestEvent) (jint event_type, void *arg);
203 void (*GetCallTrace) (JVMPI_CallTrace *trace, jint depth);
204 void (*ProfilerExit) (jint);
205 JVMPI_RawMonitor (*RawMonitorCreate) (char *lock_name);
206 void (*RawMonitorEnter) (JVMPI_RawMonitor lock_id);
207 void (*RawMonitorExit) (JVMPI_RawMonitor lock_id);
208 void (*RawMonitorWait) (JVMPI_RawMonitor lock_id, jlong ms);
209 void (*RawMonitorNotifyAll) (JVMPI_RawMonitor lock_id);
210 void (*RawMonitorDestroy) (JVMPI_RawMonitor lock_id);
211 jlong (*GetCurrentThreadCpuTime) (void);
212 void (*SuspendThread) (JNIEnv *env);
213 void (*ResumeThread) (JNIEnv *env);
214 jint (*GetThreadStatus) (JNIEnv *env);
215 jboolean (*ThreadHasRun) (JNIEnv *env);
216 jint (*CreateSystemThread) (char *name, jint priority, void (*f) (void *));
217 void (*SetThreadLocalStorage) (JNIEnv *env_id, void *ptr);
218 void *(*GetThreadLocalStorage) (JNIEnv *env_id);
219 void (*DisableGC) (void);
220 void (*EnableGC) (void);
221 void (*RunGC) (void);
222 jobjectID (*GetThreadObject) (JNIEnv *env);
223 jobjectID (*GetMethodClass) (jmethodID mid);
225 } JVMPI_Interface;
227 #endif /* __GCJ_JVMPI_H__ */