aboutsummaryrefslogtreecommitdiff
path: root/libjava/include/jvmpi.h
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/include/jvmpi.h')
-rw-r--r--libjava/include/jvmpi.h227
1 files changed, 227 insertions, 0 deletions
diff --git a/libjava/include/jvmpi.h b/libjava/include/jvmpi.h
new file mode 100644
index 0000000..1af9617
--- /dev/null
+++ b/libjava/include/jvmpi.h
@@ -0,0 +1,227 @@
+/* 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__ */