home *** CD-ROM | disk | FTP | other *** search
/ PC User 2001 August / APC_Aug2001_CD2.iso / features / j2sdk / files / linux / j2sdklin.bin / jdk1.3.1 / include-old / jit.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-06  |  8.5 KB  |  224 lines

  1. /*
  2.  * @(#)jit.h    1.37 00/02/02
  3.  *
  4.  * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the proprietary information of Sun Microsystems, Inc.  
  7.  * Use is subject to license terms.
  8.  * 
  9.  */
  10.  
  11. #ifndef _JAVASOFT_JIT_H_
  12. #define _JAVASOFT_JIT_H_
  13.  
  14. #include "bool.h"
  15. #include "java_lang_String.h"
  16. #include "exceptions.h"
  17. #include "vmprofiler.h"
  18.  
  19. typedef struct {
  20.     int * JavaVersion;
  21.     int * MicroVersion;
  22.     void * reserved1;
  23. } JITInterface;
  24.  
  25. typedef struct {
  26.     JITInterface base;
  27.     void (**p_InitializeForCompiler)(ClassClass *cb);
  28.     bool_t (**p_invokeCompiledMethod)(JHandle *o, struct methodblock *mb, 
  29.                      int args_size, ExecEnv *ee); 
  30.     bool_t (**p_CompiledCodeSignalHandler)(int sig, void *info, void *uc);
  31.     void (**p_CompilerFreeClass)(ClassClass *cb);
  32.     bool_t (**p_CompilerRegisterNatives)(ClassClass *cb);
  33.     bool_t (**p_CompilerUnregisterNatives)(ClassClass *cb);
  34.     bool_t (**p_CompilerCompileClass)(ClassClass *cb);
  35.     bool_t (**p_CompilerCompileClasses)(Hjava_lang_String *name);
  36.     void (**p_CompilerEnable)(void);
  37.     void (**p_CompilerDisable)(void);
  38.     JavaFrame *(**p_CompiledFramePrev)(JavaFrame *frame, JavaFrame *buf);
  39.     void *(**p_CompiledFrameID)(JavaFrame *frame);
  40.     void (**p_ReadInCompiledCode)(void *context, 
  41.                  struct methodblock *mb, 
  42.                  int attribute_length, 
  43.                  unsigned long (*get1byte)(void *),
  44.                  unsigned long (*get2bytes)(void *), 
  45.                  unsigned long (*get4bytes)(void *), 
  46.                  void (*getNbytes)(void *, size_t, char *));
  47.     bool_t (**p_PCinCompiledCode)(unsigned char *, struct methodblock *);
  48.     unsigned char *(**p_CompiledCodePC)(JavaFrame *frame,
  49.                     struct methodblock *mb);
  50.     char **p_CompiledCodeAttribute;
  51.     bool_t * UseLosslessQuickOpcodes;
  52.  
  53.     void * (*sysMalloc)(size_t);
  54.     void * (*sysCalloc)(size_t, size_t);
  55.     void * (*sysRealloc)(void*, size_t);
  56.     char * (*sysStrdup)(const char *);
  57.     void (*sysFree)(void*);
  58.  
  59.     ClassClass *** binclasses;
  60.     int * nbinclasses;
  61.     sys_mon_t **binclass_lock;
  62.     sys_mon_t **linkclass_lock;
  63.  
  64.     ClassClass ** classJavaLangClass;
  65.     ClassClass ** classJavaLangObject;
  66.     ClassClass ** classJavaLangString;
  67.     ClassClass ** classJavaLangThrowable;
  68.     ClassClass ** classJavaLangException;
  69.     ClassClass ** classJavaLangRuntimeException;
  70.     ClassClass ** interfaceJavaLangCloneable;
  71.  
  72.     ExecEnv * (*EE)(void);
  73.     void (*SignalError)(struct execenv *, char *, char *);
  74.     exception_t (*exceptionInternalObject)(internal_exception_t exc);
  75.     char *(*GetClassConstantClassName)(cp_item_type *constant_pool,
  76.                      int index);
  77.     ClassClass * (*FindClass)(struct execenv *ee, char *name,
  78.                 bool_t resolve);
  79.     ClassClass * (*FindClassFromClass)(struct execenv *ee, char *name,
  80.                      bool_t resolve, ClassClass *from);
  81.     void (*InitClass)(ClassClass * cb);
  82.     bool_t (*ResolveClassConstant2)(cp_item_type *constant_pool,
  83.                     unsigned index,
  84.                     struct execenv *ee,
  85.                     unsigned mask,
  86.                     bool_t init);
  87.     bool_t (*ResolveClassConstantFromClass2)(ClassClass *clazz,
  88.                          unsigned index,
  89.                          struct execenv *ee,
  90.                          unsigned mask,
  91.                          bool_t init);
  92.     bool_t (*VerifyClassAccess)(ClassClass *current_class,
  93.                   ClassClass *new_class,
  94.                   bool_t classloader_only);
  95.     bool_t (*VerifyFieldAccess)(ClassClass *current_class,
  96.                   ClassClass *field_class,
  97.                   int access, bool_t classloader_only);
  98.     bool_t (*is_subclass_of)(ClassClass *cb, ClassClass *dcb, ExecEnv *ee);
  99.     bool_t (*is_instance_of)(JHandle * h, ClassClass *dcb, ExecEnv *ee);
  100.     char * (*classname2string)(char *src, char *dst, int size);
  101.  
  102.     HObject * (*allocObject)(ExecEnv *ee, ClassClass *cb);
  103.     HObject * (*allocArray)(ExecEnv *ee, int t, int l);
  104.     HObject * (*MultiArrayAlloc)(int dimensions, ClassClass *array_cb,
  105.                    stack_item *sizes);
  106.     int (*sizearray)(int t, int l);
  107.  
  108.     void * (*dynoLink)(struct methodblock *mb, uint32_t *info);
  109.  
  110.     long (*do_execute_java_method_vararg)(ExecEnv *ee, void *obj,
  111.                         char *method_name,
  112.                         char *method_signature,
  113.                         struct methodblock *mb,
  114.                         bool_t isStaticCall, va_list args,
  115.                         long *otherBits,
  116.                         bool_t shortFloats);
  117.     long (*execute_java_static_method)(ExecEnv *ee, ClassClass *cb,
  118.                      char *method_name,
  119.                      char *signature, ...);
  120.  
  121.     bool_t (*invokeJavaMethod)(JHandle *o, struct methodblock *mb,
  122.                  int args_size, ExecEnv *ee);
  123.     bool_t (*invokeSynchronizedJavaMethod)(JHandle *o,
  124.                          struct methodblock *mb,
  125.                          int args_size, ExecEnv *ee);
  126.     bool_t (*invokeAbstractMethod)(JHandle *o, struct methodblock *mb,
  127.                      int args_size, ExecEnv *ee);
  128.     bool_t (*invokeLazyNativeMethod)(JHandle *o, struct methodblock *mb,
  129.                        int args_size, ExecEnv *ee);
  130.     bool_t (*invokeSynchronizedNativeMethod)(JHandle *o,
  131.                            struct methodblock *mb,
  132.                            int args_size, ExecEnv *ee);
  133.     bool_t (*invokeCompiledMethod)(JHandle *o, struct methodblock *mb,
  134.                      int args_size, ExecEnv *ee);
  135.     bool_t (*invokeNativeMethod)(JHandle *o, struct methodblock *mb,
  136.                    int args_size, ExecEnv *ee);
  137.     bool_t (*invokeJNINativeMethod)(JHandle *o, struct methodblock *mb,
  138.                       int args_size, ExecEnv *ee);
  139.     bool_t (*invokeJNISynchronizedNativeMethod)(JHandle *o,
  140.                           struct methodblock *mb,
  141.                           int args_size, ExecEnv *ee);
  142.  
  143.     sys_mon_t * (*monitorEnter2)(ExecEnv *ee, uintptr_t key);
  144.     int (*monitorExit2)(ExecEnv *ee, uintptr_t key);
  145.     void (*monitorRegister)(sys_mon_t *mid, char *name);
  146.     size_t (*sysMonitorSizeof)(void);
  147.     int (*sysMonitorEnter)(sys_thread_t *tid, sys_mon_t *mid);
  148.     int (*sysMonitorExit)(sys_thread_t *tid, sys_mon_t *mid);
  149.     bool_t (*sysMonitorEntered)(sys_thread_t * t, sys_mon_t *mid);
  150.  
  151.     void (*DumpThreads)(void);
  152.  
  153.     int (*ExpandJavaStackForJNI)(ExecEnv *ee,
  154.                  JavaStack **stackP, 
  155.                  JavaFrame **frameP,
  156.                  int capacity);
  157.     int (*ExpandJavaStack)(ExecEnv *ee,
  158.                JavaStack **stackP, 
  159.                JavaFrame **frameP, 
  160.                stack_item **optopP,
  161.                int args_size,
  162.                int nlocals, 
  163.                int maxstack);
  164.  
  165.     bool_t (*ExecuteJava)(unsigned char *initial_pc, ExecEnv *ee);
  166.     long (*now)(void);
  167.     int * java_profiler_isOn;
  168.     void (*java_profiler_log)(struct methodblock* caller,
  169.                   struct methodblock* callee, int32_t time);
  170.     long * JavaStackSize;
  171.     int (*jio_snprintf)(char *str, size_t count, const char *fmt, ...);
  172.     char * (*javaString2CString)(Hjava_lang_String *s, char *buf, int buflen);
  173.     
  174.     jobject (*jni_mkRefLocal)(ExecEnv *ee, JHandle *jobj);
  175.     HObject * (*cacheAlloc)(ExecEnv *ee, struct methodtable *mptr, long size);
  176.  
  177.     unsigned int * jvmpi_event_flags;
  178.     Invoker (*getCustomInvoker)(char *sig);
  179.     sys_mon_t **code_lock;
  180.   
  181.     /*  
  182.      * Support for JVM<--->Profiler interface from the JIT.
  183.      * 
  184.      * We need notification from the JIT on entry/exit of a method and 
  185.      * load/unload of compiled method in memory if the corresponding bit 
  186.      * is set in jvmpi_event_flags.
  187.      *
  188.      * event                        bit mask to & with jvmpi_event_flags
  189.      * -----                        ------------------------------------
  190.      * jvmpi_method_entry           JVMPI_EVENT_METHOD_ENTRY_ON
  191.      * jvmpi_method_exit            JVMPI_EVENT_METHOD_EXIT_ON
  192.      * jvmpi_load_compiled_method   JVMPI_EVENT_LOAD_COMPILED_METHOD_ON
  193.      * jvmpi_unload_compiled_method JVMPI_EVENT_UNLOAD_COMPILED_METHOD_ON
  194.      * 
  195.      * Above flags and the necessary types are defined in vmprofiler.h
  196.      */
  197.     void (*jvmpi_method_entry)(ExecEnv *ee, JHandle *h);
  198.     void (*jvmpi_method_exit)(ExecEnv *ee);
  199.     void (*jvmpi_load_compiled_method)(compiled_method_t *compiled_method_info);
  200.     void (*jvmpi_unload_compiled_method)(struct methodblock *mb);
  201.     JavaFrame * (**p_CompiledFrameUpdate)(JavaFrame *frame);
  202.  
  203.     void (*monitorWait2)(ExecEnv *ee, uintptr_t key, int64_t millis);
  204.     void (*monitorNotify2)(ExecEnv *ee, uintptr_t key);
  205.     void (*monitorNotifyAll2)(ExecEnv *ee, uintptr_t key);
  206.  
  207.     int (*sysMonitorWait)(sys_thread_t *tid, sys_mon_t *mid, jlong millis);
  208.     int (*sysMonitorNotify)(sys_thread_t *tid, sys_mon_t *mid);
  209.     int (*sysMonitorNotifyAll)(sys_thread_t *tid, sys_mon_t *mid);
  210.  
  211.     void (**p_CompilerLinkClass)(ClassClass *cb);
  212.     void (**p_CompilerLoadClass)(ClassClass *cb, unsigned char *data, int len);
  213.     int (**p_CompiledCodePCtoLineNo)(unsigned char *);
  214.  
  215.     sys_mon_t **queue_lock;
  216.     int    (*sysThreadSingle)(void);
  217.     void (*sysThreadMulti)(void);
  218.     int (*sysThreadEnumerateOver)(int (*func)(sys_thread_t *, void *), void *arg);
  219.     int (**p_CompilerHandlesFrame)(void);
  220.  
  221. } JITInterface6;
  222.  
  223. #endif /* !_JAVASOFT_JIT_H_ */
  224.