123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- /* Copyright (C) 2000 Free Software Foundation
- This file is part of libgcj.
- This software is copyrighted work licensed under the terms of the
- Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
- details. */
- /* Note: this file must be compilable by the C compiler (for now,
- assuming GNU C is ok). This means you must never use `//'
- comments, and all C++-specific code must be conditional on
- __cplusplus. */
- #ifndef __GCJ_JVMPI_H__
- #define __GCJ_JVMPI_H__
- #include <jni.h>
- /* JVMPI version numbers. FIXME: this is a semi-random number. The
- documentation doesn't say what it should be. */
- #define JVMPI_VERSION_1 0x00020001
- /* JVMPI return codes. FIXME: These are semi-random numbers. The
- documentation doesn't say what they should be. */
- #define JVMPI_SUCCESS 0
- #define JVMPI_FAIL 1
- #define JVMPI_NOT_AVAILABLE 2
- /* An opaque pointer representing an object ID. */
- struct _jobjectID;
- typedef struct _jobjectID * jobjectID;
- typedef struct
- {
- /* Source line number. */
- jint lineno;
- /* Method being executed. */
- jmethodID method_id;
- } JVMPI_CallFrame;
- typedef struct
- {
- JNIEnv *env_id;
- /* Number of frames in the call trace. */
- jint num_frames;
- /* An array of frames representing the trace. Callees first. */
- JVMPI_CallFrame *frames;
- } JVMPI_CallTrace;
- typedef struct
- {
- /* Name of the field. */
- char *field_name;
- /* Signature of the field. */
- char *field_signature;
- } JVMPI_Field;
- /* The documentation doesn't actually specify what the
- JVMPI_DUMP_LEVEL macros should be defined to. Here's a reasonable
- guess. */
- #define JVMPI_DUMP_LEVEL_0 0
- #define JVMPI_DUMP_LEVEL_1 1
- #define JVMPI_DUMP_LEVEL_2 2
- #define JVMPI_DUMP_LEVEL_3 3
- typedef struct
- {
- /* One of JVMPI_DUMP_LEVEL_0, JVMPI_DUMP_LEVEL_1 or
- JVMPI_DUMP_LEVEL_2. */
- jint heap_dump_level;
- } JVMPI_HeapDumpArg;
- typedef struct
- {
- /* Offset from the beginning of the method. */
- jint offset;
- /* Line number from the beginning of the source file. */
- jint lineno;
- } JVMPI_Lineno;
- typedef struct
- {
- /* Name of the method. */
- char *method_name;
- /* Signature of the method. */
- char *method_signature;
- /* Start line number from the beginning of the source file. */
- jint start_lineno;
- /* End line number from the beginning of the source file. */
- jint end_lineno;
- /* The method ID. */
- jmethodID method_id;
- } JVMPI_Method;
- /* An opaque pointer representing a raw monitor. */
- struct _JVMPI_RawMonitor;
- typedef struct _JVMPI_RawMonitor *JVMPI_RawMonitor;
- /* JVMPI event codes. FIXME: These are semi-random numbers. The
- documentation doesn't say what they should be. */
- #define JVMPI_EVENT_ARENA_DELETE 0
- #define JVMPI_EVENT_ARENA_NEW 1
- #define JVMPI_EVENT_CLASS_LOAD 2
- #define JVMPI_EVENT_CLASS_LOAD_HOOK 3
- #define JVMPI_EVENT_CLASS_UNLOAD 4
- #define JVMPI_EVENT_COMPILED_METHOD_LOAD 5
- #define JVMPI_EVENT_COMPILED_METHOD_UNLOAD 6
- #define JVMPI_EVENT_DATA_DUMP_REQUEST 7
- #define JVMPI_EVENT_DATA_RESET_REQUEST 8
- #define JVMPI_EVENT_GC_FINISH 9
- #define JVMPI_EVENT_GC_START 10
- #define JVMPI_EVENT_HEAP_DUMP 11
- #define JVMPI_EVENT_JNI_GLOBALREF_ALLOC 12
- #define JVMPI_EVENT_JNI_GLOBALREF_FREE 13
- #define JVMPI_EVENT_JNI_WEAK_GLOBALREF_ALLOC 14
- #define JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE 15
- #define JVMPI_EVENT_JVM_INIT_DONE 16
- #define JVMPI_EVENT_JVM_SHUT_DOWN 17
- #define JVMPI_EVENT_METHOD_ENTRY 18
- #define JVMPI_EVENT_METHOD_ENTRY2 19
- #define JVMPI_EVENT_METHOD_EXIT 20
- #define JVMPI_EVENT_MONITOR_CONTENDED_ENTER 21
- #define JVMPI_EVENT_MONITOR_CONTENDED_ENTERED 22
- #define JVMPI_EVENT_MONITOR_CONTENDED_EXIT 23
- #define JVMPI_EVENT_MONITOR_DUMP 24
- #define JVMPI_EVENT_MONITOR_WAIT 25
- #define JVMPI_EVENT_MONITOR_WAITED 26
- #define JVMPI_EVENT_OBJECT_ALLOC 27
- #define JVMPI_EVENT_OBJECT_DUMP 28
- #define JVMPI_EVENT_OBJECT_FREE 29
- #define JVMPI_EVENT_OBJECT_MOVE 30
- #define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER 31
- #define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED 32
- #define JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT 33
- #define JVMPI_EVENT_THREAD_END 34
- #define JVMPI_EVENT_THREAD_START 35
- #define JVMPI_EVENT_INSTRUCTION_START 36
- typedef struct
- {
- /* Event type. */
- jint event_type;
- /* Evn where this event occurred. */
- JNIEnv *env_id;
- union
- {
- struct
- {
- char *class_name;
- char *source_name;
- jint num_interfaces;
- jint num_methods;
- JVMPI_Method *methods;
- jint num_static_fields;
- JVMPI_Field *statics;
- jint num_instance_fields;
- JVMPI_Field *instances;
- jobjectID class_id;
- } class_load;
- struct
- {
- jobjectID class_id;
- } class_unload;
- struct
- {
- jint arena_id;
- jobjectID class_id;
- jint is_array;
- jint size;
- jobjectID obj_id;
- } obj_alloc;
- struct
- {
- char *thread_name;
- char *group_name;
- char *parent_name;
- jobjectID thread_id;
- JNIEnv *thread_env_id;
- } thread_start;
- } u;
- } JVMPI_Event;
- typedef struct
- {
- /* JVMPI version number. */
- jint version;
-
- /* Implemented by the user... */
- void (*NotifyEvent) (JVMPI_Event *event);
-
- /* Implemented by the runtime... */
- jint (*EnableEvent) (jint event_type, void *arg);
- jint (*DisableEvent) (jint event_type, void *arg);
- jint (*RequestEvent) (jint event_type, void *arg);
- void (*GetCallTrace) (JVMPI_CallTrace *trace, jint depth);
- void (*ProfilerExit) (jint);
- JVMPI_RawMonitor (*RawMonitorCreate) (char *lock_name);
- void (*RawMonitorEnter) (JVMPI_RawMonitor lock_id);
- void (*RawMonitorExit) (JVMPI_RawMonitor lock_id);
- void (*RawMonitorWait) (JVMPI_RawMonitor lock_id, jlong ms);
- void (*RawMonitorNotifyAll) (JVMPI_RawMonitor lock_id);
- void (*RawMonitorDestroy) (JVMPI_RawMonitor lock_id);
- jlong (*GetCurrentThreadCpuTime) (void);
- void (*SuspendThread) (JNIEnv *env);
- void (*ResumeThread) (JNIEnv *env);
- jint (*GetThreadStatus) (JNIEnv *env);
- jboolean (*ThreadHasRun) (JNIEnv *env);
- jint (*CreateSystemThread) (char *name, jint priority, void (*f) (void *));
- void (*SetThreadLocalStorage) (JNIEnv *env_id, void *ptr);
- void *(*GetThreadLocalStorage) (JNIEnv *env_id);
- void (*DisableGC) (void);
- void (*EnableGC) (void);
- void (*RunGC) (void);
- jobjectID (*GetThreadObject) (JNIEnv *env);
- jobjectID (*GetMethodClass) (jmethodID mid);
-
- } JVMPI_Interface;
- #endif /* __GCJ_JVMPI_H__ */
|