1 #include <gcj/cni.h>
2
3 #include <jvm.h>
4 #include <jvmti.h>
5 #include <stdio.h>
6
7 #include "jvmti-int.h"
8 #include "events.h"
9
10 void
print_events()11 print_events ()
12 {
13 #define DO(X) \
14 do \
15 { \
16 if (JVMTI_REQUESTED_EVENT (X)) \
17 printf (#X ","); \
18 } \
19 while (0)
20
21 printf ("RequestedEvents: ");
22 DO (VMInit);
23 DO (VMDeath);
24 DO (ThreadStart);
25 DO (ThreadEnd);
26 DO (ClassFileLoadHook);
27 DO (ClassLoad);
28 DO (ClassPrepare);
29 DO (VMStart);
30 DO (Exception);
31 DO (ExceptionCatch);
32 DO (SingleStep);
33 DO (FramePop);
34 DO (Breakpoint);
35 DO (FieldAccess);
36 DO (FieldModification);
37 DO (MethodEntry);
38 DO (MethodExit);
39 DO (NativeMethodBind);
40 DO (CompiledMethodLoad);
41 DO (CompiledMethodUnload);
42 DO (DynamicCodeGenerated);
43 DO (DataDumpRequest);
44 DO (MonitorWait);
45 DO (MonitorWaited);
46 DO (MonitorContendedEnter);
47 DO (MonitorContendedEntered);
48 DO (GarbageCollectionStart);
49 DO (GarbageCollectionFinish);
50 DO (ObjectFree);
51 DO (VMObjectAlloc);
52 printf ("\n");
53 #undef DO
54 }
55
56 static void
VMInitCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread)57 VMInitCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread)
58 {
59 printf ("VMInitCB jni_env=%#llx thread=%#llx\n",
60 (unsigned long long) jni_env, (unsigned long long) thread);
61 }
62
63 static void
VMDeathCB(jvmtiEnv * env,JNIEnv * jni_env)64 VMDeathCB (jvmtiEnv *env, JNIEnv *jni_env)
65 {
66 printf ("VMDeathCB jni_env=%#llx\n", (unsigned long long) jni_env);
67 }
68
69 static void
ThreadStartCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread)70 ThreadStartCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread)
71 {
72 printf ("ThreadStartCB jni_env=%#llx thread=%#llx\n",
73 (unsigned long long) jni_env, (unsigned long long) thread);
74 }
75
76 static void
ThreadEndCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread)77 ThreadEndCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread)
78 {
79 printf ("ThreadEndCB jni_env=%#llx thread=%#llx\n",
80 (unsigned long long) jni_env, (unsigned long long) thread);
81 }
82
83 static void
ClassFileLoadHookCB(jvmtiEnv * env,JNIEnv * jni_env,jclass class_being_redefined,jobject loader,const char * name,jobject protection_domain,jint class_data_len,const unsigned char * class_data,jint * new_class_data_len,unsigned char ** new_class_data)84 ClassFileLoadHookCB (jvmtiEnv *env, JNIEnv *jni_env,
85 jclass class_being_redefined, jobject loader,
86 const char *name, jobject protection_domain,
87 jint class_data_len, const unsigned char *class_data,
88 jint *new_class_data_len, unsigned char **new_class_data)
89 {
90 printf ("ClassFileLoadHookCB jni_env=%#llx class_being_redefined=%#llx"
91 " loader=%#llx", (unsigned long long) jni_env, (unsigned long long)
92 class_being_redefined, (unsigned long long) loader);
93 printf (" name=%s protection_domain=%#llx class_data_len=%d class_data=%#llx",
94 name, (unsigned long long) protection_domain, (int) class_data_len,
95 (unsigned long long) class_data);
96 printf (" new_class_data_len=%#llx new_class_data=%#llx\n",
97 (unsigned long long) new_class_data_len, (unsigned long long)
98 new_class_data);
99 }
100
101 static void
ClassLoadCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jclass klass)102 ClassLoadCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread, jclass klass)
103 {
104 printf ("ClassLoadCB jni_env=%#llx thread=%#llx klass=%#llx\n",
105 (unsigned long long) jni_env, (unsigned long long) thread,
106 (unsigned long long) klass);
107 }
108
109 static void
ClassPrepareCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jclass klass)110 ClassPrepareCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread, jclass klass)
111 {
112 printf ("ClassPrepareCB jni_env=%#llx thread=%#llx klass=%#llx\n",
113 (unsigned long long)jni_env, (unsigned long long) thread,
114 (unsigned long long) klass);
115 }
116
117 static void
VMStartCB(jvmtiEnv * env,JNIEnv * jni_env)118 VMStartCB (jvmtiEnv *env, JNIEnv *jni_env)
119 {
120 printf ("VMStartCB jni_env=%#llx\n", (unsigned long long) jni_env);
121 }
122
123 static void
ExceptionCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,jlocation location,jobject exception,jmethodID catch_method,jlocation catch_location)124 ExceptionCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread, jmethodID method,
125 jlocation location, jobject exception, jmethodID catch_method,
126 jlocation catch_location)
127 {
128 printf ("ExceptionCB jni_env=%#llx thread=%#llx method=%#llx location=%#llx",
129 (unsigned long long) jni_env, (unsigned long long) thread,
130 (unsigned long long) method, (unsigned long long) location);
131 printf (" exception=%#llx catch_method=%#llx catch_location=%#llx\n",
132 (unsigned long long) exception, (unsigned long long) catch_method,
133 (unsigned long long) catch_location);
134 }
135
136 static void
ExceptionCatchCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,jlocation location,jobject exception)137 ExceptionCatchCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
138 jmethodID method, jlocation location, jobject exception)
139 {
140 printf ("ExceptionCatchCB jni_env=%#llx thread=%#llx method=%#llx"
141 " location=%#llx",
142 (unsigned long long) jni_env, (unsigned long long) thread,
143 (unsigned long long) method, (unsigned long long) location);
144 printf (" exception=%#llx\n", (unsigned long long) exception);
145 }
146
147 static void
SingleStepCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,jlocation location)148 SingleStepCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread, jmethodID method,
149 jlocation location)
150 {
151 printf ("SingleStepCB jni_env=%#llx thread=%#llx method=%#llx"
152 " location=%#llx\n",
153 (unsigned long long) jni_env, (unsigned long long) thread,
154 (unsigned long long) method, (unsigned long long) location);
155 }
156
157 static void
FramePopCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,jboolean was_popped_by_exception)158 FramePopCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread, jmethodID method,
159 jboolean was_popped_by_exception)
160 {
161 printf ("FramePopCB jni_env=%#llx thread=%#llx method=%#llx",
162 (unsigned long long) jni_env, (unsigned long long) thread,
163 (unsigned long long) method);
164 printf (" was_pooped_by_exception=%d\n", (was_popped_by_exception ?
165 1 : 0));
166 }
167
168 static void
BreakpointCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,jlocation location)169 BreakpointCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread, jmethodID method,
170 jlocation location)
171 {
172 printf ("BreakpointCB jni_env=%#llx thread=%#llx method=%#llx"
173 " location=%#llx\n", (unsigned long long) jni_env,
174 (unsigned long long) thread, (unsigned long long) method,
175 (unsigned long long) location);
176 }
177
178 static void
FieldAccessCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,jlocation location,jclass field_klass,jobject object,jfieldID field)179 FieldAccessCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
180 jmethodID method, jlocation location, jclass field_klass,
181 jobject object, jfieldID field)
182 {
183 printf ("FieldAccessCB jni_env=%#llx thread=%#llx method=%#llx"
184 " location=%#llx", (unsigned long long) jni_env, (unsigned long long)
185 thread, (unsigned long long) method, (unsigned long long) location);
186 printf (" field_klass=%#llx object=%#llx field=%#llx\n", (unsigned long long)
187 field_klass, (unsigned long long) object, (unsigned long long) field);
188 }
189
190 static void
FieldModificationCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,jlocation location,jclass field_klass,jobject object,jfieldID field,char signature_type,jvalue new_value)191 FieldModificationCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
192 jmethodID method, jlocation location, jclass field_klass,
193 jobject object, jfieldID field, char signature_type,
194 jvalue new_value)
195
196 {
197 printf ("FieldModificationCB jni_env=%#llx thread=%#llx method=%#llx"
198 " location=%#llx", (unsigned long long) jni_env, (unsigned long long)
199 thread, (unsigned long long) method, (unsigned long long) location);
200 printf (" field_klass=%#llx object=%#llx field=%#llx signature_type=%c",
201 (unsigned long long) field_klass, (unsigned long long) object,
202 (unsigned long long) field, signature_type);
203 printf (" new_value=%#llx\n", (unsigned long long) new_value.l);
204 }
205
206 static void
MethodEntryCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method)207 MethodEntryCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
208 jmethodID method)
209 {
210 printf ("MethodEntryCB jni_env=%#llx thread=%#llx method=%#llx\n",
211 (unsigned long long) jni_env, (unsigned long long) thread,
212 (unsigned long long) method);
213 }
214
215 static void
MethodExitCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,jboolean was_popped_by_exception,jvalue return_value)216 MethodExitCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
217 jmethodID method, jboolean was_popped_by_exception,
218 jvalue return_value)
219 {
220 printf ("MethodExitCB jni_env=%#llx thread=%#llx method=%#llx",
221 (unsigned long long) jni_env, (unsigned long long) thread,
222 (unsigned long long) method);
223 printf (" was_popped_by_exception=%d return_value=%d\n",
224 (was_popped_by_exception) ? 1 : 0, (int) return_value.i);
225 }
226
227 static void
NativeMethodBindCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jmethodID method,void * address,void ** new_address_ptr)228 NativeMethodBindCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
229 jmethodID method, void *address, void **new_address_ptr)
230 {
231 printf ("NativeMethodBindCB jni_env=%#llx thread=%#llx method=%#llx",
232 (unsigned long long) jni_env, (unsigned long long) thread,
233 (unsigned long long) method);
234 printf (" address=%#llx new_address_ptr=%#llx\n", (unsigned long long)
235 address, (unsigned long long) new_address_ptr);
236 }
237
238 static void
CompiledMethodLoadCB(jvmtiEnv * env,jmethodID method,jint code_size,const void * code_addr,jint map_length,const jvmtiAddrLocationMap * map,const void * compile_info)239 CompiledMethodLoadCB (jvmtiEnv *env, jmethodID method, jint code_size,
240 const void *code_addr, jint map_length,
241 const jvmtiAddrLocationMap *map,
242 const void *compile_info)
243 {
244 printf ("CompiledMethodLoadCB method=%#llx code_size=%#llx code_addr=%#llx",
245 (unsigned long long) method, (unsigned long long) code_size,
246 (unsigned long long) code_addr);
247 printf (" map_length=%d map=%#llx compile_info=%#llx\n", (int) map_length,
248 (unsigned long long) map, (unsigned long long) compile_info);
249 }
250
251 static void
CompiledMethodUnloadCB(jvmtiEnv * env,jmethodID method,const void * code_addr)252 CompiledMethodUnloadCB (jvmtiEnv *env, jmethodID method, const void *code_addr)
253 {
254 printf ("CompiledMethodUnloadCB method=%#llx code_addr=%#llx\n",
255 (unsigned long long) method, (unsigned long long) code_addr);
256 }
257
258 static void
DynamicCodeGeneratedCB(jvmtiEnv * env,const char * name,const void * address,jint length)259 DynamicCodeGeneratedCB (jvmtiEnv *env, const char *name, const void *address,
260 jint length)
261 {
262 printf ("DynamicCodeGeneratedCB name=%s address=%#llx length=%d\n", name,
263 (unsigned long long) address, (int) length);
264 }
265
266 static void
DataDumpRequestCB(jvmtiEnv * env)267 DataDumpRequestCB (jvmtiEnv *env)
268 {
269 printf ("DataDumpRequestCB\n");
270 }
271
272 static void
MonitorWaitCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jobject object,jlong timeout)273 MonitorWaitCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread, jobject object,
274 jlong timeout)
275 {
276 printf ("MonitorWaitCB jni_env=%#llx thread=%#llx object=%#llx timeout=%ld\n",
277 (unsigned long long) jni_env, (unsigned long long) thread,
278 (unsigned long long) object, (long) timeout);
279 }
280
281 static void
MonitorWaitedCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jobject object,jboolean timed_out)282 MonitorWaitedCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
283 jobject object, jboolean timed_out)
284 {
285 printf ("MonitorWaitedCB jni_env=%#llx thread=%#llx object=%#llx"
286 " timed_out=%d\n", (unsigned long long) jni_env, (unsigned long long)
287 thread, (unsigned long long) object, (timed_out) ? 1 : 0);
288 }
289
290 static void
MonitorContendedEnterCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jobject object)291 MonitorContendedEnterCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
292 jobject object)
293 {
294 printf ("MonitorContendedEnterCB jni_env=%#llx thread=%#llx object=%#llx\n",
295 (unsigned long long) jni_env, (unsigned long long) thread,
296 (unsigned long long) object);
297 }
298
299 static void
MonitorContendedEnteredCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jobject object)300 MonitorContendedEnteredCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
301 jobject object)
302 {
303 printf ("MonitorContendedEnteredCB jni_env=%#llx thread=%#llx object=%#llx\n",
304 (unsigned long long) jni_env, (unsigned long long) thread,
305 (unsigned long long) object);
306 }
307
308 static void
GarbageCollectionStartCB(jvmtiEnv * env)309 GarbageCollectionStartCB (jvmtiEnv *env)
310 {
311 printf ("GarbageCollectionStartCB\n");
312 }
313
314 static void
GarbageCollectionFinishCB(jvmtiEnv * env)315 GarbageCollectionFinishCB (jvmtiEnv *env)
316 {
317 printf ("GarbageCollectionFinishCB\n");
318 }
319
320 static void
ObjectFreeCB(jvmtiEnv * env,jlong tag)321 ObjectFreeCB (jvmtiEnv *env, jlong tag)
322 {
323 printf ("ObjectFreeCB tag=%ld\n", (long) tag);
324 }
325
326 static void
VMObjectAllocCB(jvmtiEnv * env,JNIEnv * jni_env,jthread thread,jobject object,jclass object_klass,jlong size)327 VMObjectAllocCB (jvmtiEnv *env, JNIEnv *jni_env, jthread thread,
328 jobject object, jclass object_klass, jlong size)
329 {
330 printf ("VMObjectAllocCB jni_env=%#llx thread=%#llx object=%#llx",
331 (unsigned long long) jni_env, (unsigned long long) thread,
332 (unsigned long long) object);
333 printf (" object_klass=%#llx size=%ld\n", (unsigned long long) object_klass,
334 (long) size);
335 }
336
337 static void
do_enable_tests()338 do_enable_tests ()
339 {
340 printf ("- enable tests -\n");
341 JavaVM *vm = _Jv_GetJavaVM ();
342 jvmtiEnv *env[3];
343 int i;
344 for (i = 0; i < 3; ++i)
345 {
346 vm->GetEnv (reinterpret_cast<void **> (&env[i]), JVMTI_VERSION_1_0);
347 printf ("created JVMTI environment #%d\n", i);
348 }
349
350 jvmtiEventCallbacks callbacks;
351 memset (&callbacks, 0, sizeof (jvmtiEventCallbacks));
352
353 printf ("setting callbacks for envs\n");
354 callbacks.VMInit = VMInitCB;
355 env[0]->SetEventCallbacks (&callbacks, sizeof (callbacks));
356 callbacks.VMDeath = VMDeathCB;
357 env[1]->SetEventCallbacks (&callbacks, sizeof (callbacks));
358 callbacks.ThreadEnd = ThreadEndCB;
359 env[2]->SetEventCallbacks (&callbacks, sizeof (callbacks));
360 print_events ();
361
362 printf ("enable VM_INIT for env0, env1, env2\n");
363 env[0]->SetEventNotificationMode (JVMTI_ENABLE, JVMTI_EVENT_VM_INIT, NULL);
364 env[1]->SetEventNotificationMode (JVMTI_ENABLE, JVMTI_EVENT_VM_INIT, NULL);
365 env[2]->SetEventNotificationMode (JVMTI_ENABLE, JVMTI_EVENT_VM_INIT, NULL);
366 print_events ();
367
368 printf ("enable VM_DEATH for env1,env2\n");
369 env[1]->SetEventNotificationMode (JVMTI_ENABLE, JVMTI_EVENT_VM_DEATH, NULL);
370 env[2]->SetEventNotificationMode (JVMTI_ENABLE, JVMTI_EVENT_VM_DEATH, NULL);
371 print_events ();
372
373 /* Used to use a non-NULL event thread, but that causes problems
374 when SetEventNotificationMode tries to validate the thread. */
375 printf ("enable THREAD_END for env2\n");
376 env[2]->SetEventNotificationMode (JVMTI_ENABLE, JVMTI_EVENT_THREAD_END,
377 NULL);
378 print_events ();
379
380 printf ("disposing of env1\n");
381 env[1]->DisposeEnvironment ();
382 print_events ();
383
384 printf ("disposing of env0\n");
385 env[0]->DisposeEnvironment ();
386 print_events ();
387
388 printf ("disable VMInit in env2\n");
389 env[2]->SetEventNotificationMode (JVMTI_DISABLE, JVMTI_EVENT_VM_INIT, NULL);
390 print_events ();
391
392 printf ("clear VMDeath callback in env2\n");
393 callbacks.VMDeath = NULL;
394 env[2]->SetEventCallbacks (&callbacks, sizeof (callbacks));
395 print_events ();
396
397 printf ("sending VMInit\n");
398 _Jv_JVMTI_PostEvent (JVMTI_EVENT_VM_INIT, (jthread) 0x1234,
399 (JNIEnv *) 0x5678);
400
401 printf ("sending ThreadEnd\n");
402 _Jv_JVMTI_PostEvent (JVMTI_EVENT_THREAD_END, (jthread) 0x1234,
403 (JNIEnv *) 0x5678);
404
405 /* See comment above re: SetEventNotificationMode and validity
406 checking
407 printf ("sending ThreadEnd (no match)\n");
408 _Jv_JVMTI_PostEvent (JVMTI_EVENT_THREAD_END, (jthread) 0x4321,
409 (JNIEnv *) 0x5678);
410 */
411
412 printf ("sending VMDeath\n");
413 _Jv_JVMTI_PostEvent (JVMTI_EVENT_VM_DEATH, (jthread) NULL,
414 (JNIEnv *) 0x5678);
415
416 printf ("disposing of env2\n");
417 env[2]->DisposeEnvironment ();
418 print_events ();
419 }
420
421 static void
do_callback_arg_tests()422 do_callback_arg_tests ()
423 {
424 printf ("- callback arg tests -\n");
425 JavaVM *vm = _Jv_GetJavaVM ();
426 jvmtiEnv *env;
427 vm->GetEnv (reinterpret_cast<void **> (&env), JVMTI_VERSION_1_0);
428
429 // Define all the callbacks
430 #define DEFINE(Event) callbacks.Event = Event ## CB;
431 jvmtiEventCallbacks callbacks;
432 DEFINE(VMInit);
433 DEFINE(VMDeath);
434 DEFINE(ThreadStart);
435 DEFINE(ThreadEnd);
436 DEFINE(ClassFileLoadHook);
437 DEFINE(ClassLoad);
438 DEFINE(ClassPrepare);
439 DEFINE(VMStart);
440 DEFINE(Exception);
441 DEFINE(ExceptionCatch);
442 DEFINE(SingleStep);
443 DEFINE(FramePop);
444 DEFINE(Breakpoint);
445 DEFINE(FieldAccess);
446 DEFINE(FieldModification);
447 DEFINE(MethodEntry);
448 DEFINE(MethodExit);
449 DEFINE(NativeMethodBind);
450 DEFINE(CompiledMethodLoad);
451 DEFINE(CompiledMethodUnload);
452 DEFINE(DynamicCodeGenerated);
453 DEFINE(DataDumpRequest);
454 DEFINE(MonitorWait);
455 DEFINE(MonitorWaited);
456 DEFINE(MonitorContendedEnter);
457 DEFINE(MonitorContendedEntered);
458 DEFINE(GarbageCollectionStart);
459 DEFINE(GarbageCollectionFinish);
460 DEFINE(ObjectFree);
461 DEFINE(VMObjectAlloc);
462 #undef DEFINE
463 env->SetEventCallbacks (&callbacks, sizeof (callbacks));
464
465 // Enable all the callbacks
466 #define ENABLE(Event) \
467 env->SetEventNotificationMode (JVMTI_ENABLE, JVMTI_EVENT_ ## Event, NULL)
468 ENABLE (VM_INIT);
469 ENABLE (VM_DEATH);
470 ENABLE (THREAD_START);
471 ENABLE (THREAD_END);
472 ENABLE (CLASS_FILE_LOAD_HOOK);
473 ENABLE (CLASS_LOAD);
474 ENABLE (CLASS_PREPARE);
475 ENABLE (VM_START);
476 ENABLE (EXCEPTION);
477 ENABLE (EXCEPTION_CATCH);
478 ENABLE (SINGLE_STEP);
479 ENABLE (FRAME_POP);
480 ENABLE (BREAKPOINT);
481 ENABLE (FIELD_ACCESS);
482 ENABLE (FIELD_MODIFICATION);
483 ENABLE (METHOD_ENTRY);
484 ENABLE (METHOD_EXIT);
485 ENABLE (NATIVE_METHOD_BIND);
486 ENABLE (COMPILED_METHOD_LOAD);
487 ENABLE (COMPILED_METHOD_UNLOAD);
488 ENABLE (DYNAMIC_CODE_GENERATED);
489 ENABLE (DATA_DUMP_REQUEST);
490 ENABLE (MONITOR_WAIT);
491 ENABLE (MONITOR_WAITED);
492 ENABLE (MONITOR_CONTENDED_ENTER);
493 ENABLE (MONITOR_CONTENDED_ENTERED);
494 ENABLE (GARBAGE_COLLECTION_START);
495 ENABLE (GARBAGE_COLLECTION_FINISH);
496 ENABLE (OBJECT_FREE);
497 ENABLE (VM_OBJECT_ALLOC);
498
499 // All events should now be enabled.
500 print_events ();
501
502 _Jv_JVMTI_PostEvent (JVMTI_EVENT_VM_INIT, (jthread) 0x2, (JNIEnv *) 0x1);
503 _Jv_JVMTI_PostEvent (JVMTI_EVENT_VM_DEATH, (jthread) 0x2, (JNIEnv *) 0x1);
504 _Jv_JVMTI_PostEvent (JVMTI_EVENT_THREAD_START, (jthread) 0x2,
505 (JNIEnv *) 0x1);
506 _Jv_JVMTI_PostEvent (JVMTI_EVENT_THREAD_END, (jthread) 0x2,
507 (JNIEnv *) 0x1);
508 _Jv_JVMTI_PostEvent (JVMTI_EVENT_CLASS_FILE_LOAD_HOOK, (jthread) 0xb00,
509 (JNIEnv *) 0x1, (jclass) 0x2, (jobject) 0x3,
510 "4", (jobject) 0x5, (jint) 6,
511 (const unsigned char *) 0x7, (jint *) 0x8,
512 (unsigned char **) 0x9);
513 _Jv_JVMTI_PostEvent (JVMTI_EVENT_CLASS_LOAD, (jthread) 0x2, (JNIEnv *) 0x1,
514 (jclass) 0x3);
515 _Jv_JVMTI_PostEvent (JVMTI_EVENT_CLASS_PREPARE, (jthread) 0x2,
516 (JNIEnv *) 0x1, (jclass) 0x3);
517 _Jv_JVMTI_PostEvent (JVMTI_EVENT_VM_START, (jthread) 0xb00, (JNIEnv *) 0x1);
518 _Jv_JVMTI_PostEvent (JVMTI_EVENT_EXCEPTION, (jthread) 0x2, (JNIEnv *) 0x1,
519 (jmethodID) 0x3, (jlocation) 0x4, (jobject) 0x5,
520 (jmethodID) 0x6, (jlocation) 0x7);
521 _Jv_JVMTI_PostEvent (JVMTI_EVENT_EXCEPTION_CATCH, (jthread) 0x2,
522 (JNIEnv *) 0x1, (jmethodID) 0x3, (jlocation) 0x4,
523 (jobject) 0x5);
524 _Jv_JVMTI_PostEvent (JVMTI_EVENT_SINGLE_STEP, (jthread) 0x2, (JNIEnv *) 0x1,
525 (jmethodID) 0x3, (jlocation) 0x4);
526 _Jv_JVMTI_PostEvent (JVMTI_EVENT_FRAME_POP, (jthread) 0x2, (JNIEnv *) 0x1,
527 (jmethodID) 0x3, 4);
528 _Jv_JVMTI_PostEvent (JVMTI_EVENT_BREAKPOINT, (jthread) 0x2, (JNIEnv *) 0x1,
529 (jmethodID) 0x3, (jlocation) 0x4);
530 _Jv_JVMTI_PostEvent (JVMTI_EVENT_FIELD_ACCESS, (jthread) 0x2,
531 (JNIEnv *) 0x1, (jmethodID) 0x3, (jlocation) 0x4,
532 (jclass) 0x5, (jobject) 0x6, (jfieldID) 0x7);
533 jvalue value;
534 value.l = (jobject) 0x9;
535 _Jv_JVMTI_PostEvent (JVMTI_EVENT_FIELD_MODIFICATION, (jthread) 0x2,
536 (JNIEnv *) 0x1, (jmethodID) 0x3, (jlocation) 0x4,
537 (jclass) 0x5, (jobject) 0x6, (jfieldID) 0x7,
538 (int) '8', value);
539 _Jv_JVMTI_PostEvent (JVMTI_EVENT_METHOD_ENTRY, (jthread) 0x2,
540 (JNIEnv *) 0x1, (jmethodID) 0x3);
541 jvalue value2;
542 value2.i = 5;
543 _Jv_JVMTI_PostEvent (JVMTI_EVENT_METHOD_EXIT, (jthread) 0x2,
544 (JNIEnv *) 0x1, (jmethodID) 0x3, 4, value2);
545 _Jv_JVMTI_PostEvent (JVMTI_EVENT_NATIVE_METHOD_BIND, (jthread) 0x2,
546 (JNIEnv *) 0x1, (jmethodID) 0x3, (void *) 0x4,
547 (void **) 0x5);
548 _Jv_JVMTI_PostEvent (JVMTI_EVENT_COMPILED_METHOD_LOAD, (jthread) 0xb00,
549 (jmethodID) 0x1, (jint) 2, (const void *) 0x3,
550 (jint) 4, (const jvmtiAddrLocationMap *) 0x5,
551 (const void *) 0x6);
552 _Jv_JVMTI_PostEvent (JVMTI_EVENT_COMPILED_METHOD_UNLOAD, (jthread) 0xb00,
553 (jmethodID) 0x1, (const void *) 0x2);
554 _Jv_JVMTI_PostEvent (JVMTI_EVENT_DYNAMIC_CODE_GENERATED, (jthread) 0xb00,
555 "1", (const void *) 0x2, (jint) 3);
556 _Jv_JVMTI_PostEvent (JVMTI_EVENT_DATA_DUMP_REQUEST, (jthread) 0xb00);
557 _Jv_JVMTI_PostEvent (JVMTI_EVENT_MONITOR_WAIT, (jthread) 0x2,
558 (JNIEnv *) 0x1, (jobject) 0x3, (jlong) 4);
559 _Jv_JVMTI_PostEvent (JVMTI_EVENT_MONITOR_WAITED, (jthread) 0x2,
560 (JNIEnv *) 0x1, (jobject) 0x3, (int) 4);
561 _Jv_JVMTI_PostEvent (JVMTI_EVENT_MONITOR_CONTENDED_ENTER, (jthread) 0x2,
562 (JNIEnv *) 0x1, (jobject) 0x3);
563 _Jv_JVMTI_PostEvent (JVMTI_EVENT_MONITOR_CONTENDED_ENTERED, (jthread) 0x2,
564 (JNIEnv *) 0x1, (jobject) 0x3);
565 _Jv_JVMTI_PostEvent (JVMTI_EVENT_GARBAGE_COLLECTION_START, (jthread) 0xb00);
566 _Jv_JVMTI_PostEvent (JVMTI_EVENT_GARBAGE_COLLECTION_FINISH, (jthread) 0xb00);
567 _Jv_JVMTI_PostEvent (JVMTI_EVENT_OBJECT_FREE, (jthread) 0xb00, (jlong) 1);
568 _Jv_JVMTI_PostEvent (JVMTI_EVENT_VM_OBJECT_ALLOC, (jthread) 0x2,
569 (JNIEnv *) 0x1, (jobject) 0x3, (jclass) 0x4,
570 (jlong) 5);
571 }
572
573 void
do_events_tests()574 events::do_events_tests ()
575 {
576 do_enable_tests ();
577 do_callback_arg_tests ();
578 }
579