mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			228 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
| /* 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__ */
 |