X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fglobal.h;h=0664da6b368e3d85e62e8ec276049cdd0626a09a;hb=59dee6e40c57f79dcfdd77ec9fe48af4a8bcf2f6;hp=7bd2e8aba7c07c5c2f61ead14255d0f506617005;hpb=91fa9641e9bb4eccc7b84d0403676a5501249c6e;p=cacao.git diff --git a/src/vm/global.h b/src/vm/global.h index 7bd2e8aba..0664da6b3 100644 --- a/src/vm/global.h +++ b/src/vm/global.h @@ -1,80 +1,113 @@ -/* global.h ******************************************************************** +/* src/vm/global.h - global definitions - Copyright (c) 1997 A. Krall, R. Grafl, M. Gschwind, M. Probst + Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates, + R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner, + C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger, + Institut f. Computersprachen - TU Wien - See file COPYRIGHT for information on usage and disclaimer of warranties + This file is part of CACAO. - Contains global definitions which are used in the whole program, includes - some files and contains global used macros. + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. - Authors: Reinhard Grafl EMAIL: cacao@complang.tuwien.ac.at - Andreas Krall (andi) EMAIL: cacao@complang.tuwien.ac.at - Changes: Mark Probst (schani) EMAIL: cacao@complang.tuwien.ac.at - Philipp Tomsich (phil) EMAIL: cacao@complang.tuwien.ac.at + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. - Last Change: $Id: global.h 390 2003-07-15 15:52:21Z carolyn $ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. -*******************************************************************************/ - -#ifndef __global_h_ -#define __global_h_ - -#include "config.h" + Contact: cacao@complang.tuwien.ac.at -#define NEW_GC /* if enabled, includes the new gc. -- phil. */ + Authors: Reinhard Grafl + Andreas Krall -#define STATISTICS /* if enabled collects program statistics */ + Changes: Mark Probst + Philipp Tomsich + Edwin Steiner + Joseph Wenninger + Christian Thalinger -/* - * JIT_MARKER_SUPPORT is the define used to toggle Just-in-time generated - * marker functions on and off. - * - * SIZE_FROM_CLASSINFO toggles between the bitmap_based and the new method - * of determining the sizes of objects on the heap. - */ -#undef JIT_MARKER_SUPPORT /* phil */ -#define SIZE_FROM_CLASSINFO - -/* standard includes **********************************************************/ + $Id: global.h 3811 2005-11-28 16:23:40Z edwin $ -#include -#include -#include -#include +*/ -#include "toolbox/memory.h" -#include "toolbox/chain.h" -#include "toolbox/list.h" -#include "toolbox/loging.h" -/* system dependent types *****************************************************/ +#ifndef _GLOBAL_H +#define _GLOBAL_H +#include "config.h" #include "types.h" /* additional data types ******************************************************/ -typedef void *voidptr; /* generic pointer */ +typedef void *voidptr; /* generic pointer */ +typedef void (*functionptr) (void); /* generic function pointer */ +typedef u1* methodptr; -typedef int bool; /* boolean data type */ +typedef int bool; /* boolean data type */ #define true 1 #define false 0 -#define PRIMITIVETYPE_COUNT 9 /* number of primitive types */ -typedef void (*functionptr) (); /* generic function pointer */ +/* immediate data union */ +typedef union { + s4 i; + s8 l; + float f; + double d; + void *a; + functionptr fp; + u1 b[8]; +} imm_union; -#define MAX_ALIGN 8 /* most generic alignment for JavaVM values */ -/* shutdown function **********************************************************/ +/* forward typedefs ***********************************************************/ + +typedef struct java_objectheader java_objectheader; +typedef struct java_objectarray java_objectarray; + + +/* define some CACAO paths ****************************************************/ + +#define CACAO_VM_ZIP_PATH "/share/cacao/vm.zip" +#define CLASSPATH_LIBRARY_PATH "/lib/classpath" +#define CLASSPATH_GLIBJ_ZIP_PATH "/share/classpath/" GLIBJZ_STRING + -void cacao_shutdown(s4 status); +/* + * ENABLE_VERIFIER activates bytecode verification and other checks + */ +#define ENABLE_VERIFIER + +/* + * TYPECHECK_STACK_COMPCAT activates full checking of computational + * categories for stack manipulations (POP,POP2,SWAP,DUP,DUP2,DUP_X1, + * DUP2_X1,DUP_X2,DUP2_X2). + */ +#define TYPECHECK_STACK_COMPCAT + +/* if we have threads disabled this one is not defined ************************/ + +#if !defined(USE_THREADS) +#define THREADSPECIFIC +#endif + + +#define MAX_ALIGN 8 /* most generic alignment for JavaVM values */ /* basic data types ***********************************************************/ +/* CAUTION: jit/jit.h relies on these numerical values! */ #define TYPE_INT 0 /* the JavaVM types must numbered in the */ #define TYPE_LONG 1 /* same order as the ICMD_Ixxx to ICMD_Axxx */ #define TYPE_FLOAT 2 /* instructions (LOAD and STORE) */ @@ -83,12 +116,43 @@ void cacao_shutdown(s4 status); #define TYPE_VOID 10 +/* primitive data types *******************************************************/ + +/* These values are used in parsed descriptors and in some other places */ +/* were the different types handled internally as TYPE_INT have to be */ +/* distinguished. */ + +#define PRIMITIVETYPE_COUNT 11 /* number of primitive types (+ dummies) */ + +/* CAUTION: Don't change the numerical values! These constants are + * used as indices into the primitive type table. + */ +#define PRIMITIVETYPE_INT TYPE_INT +#define PRIMITIVETYPE_LONG TYPE_LONG +#define PRIMITIVETYPE_FLOAT TYPE_FLOAT +#define PRIMITIVETYPE_DOUBLE TYPE_DOUBLE +#define PRIMITIVETYPE_DUMMY1 TYPE_ADR /* not used! */ +#define PRIMITIVETYPE_BYTE 5 +#define PRIMITIVETYPE_CHAR 6 +#define PRIMITIVETYPE_SHORT 7 +#define PRIMITIVETYPE_BOOLEAN 8 +#define PRIMITIVETYPE_DUMMY2 9 /* not used! */ +#define PRIMITIVETYPE_VOID TYPE_VOID + +/* some Java related defines **************************************************/ + +#define JAVA_VERSION "1.4.2" /* this version is supported by CACAO */ +#define CLASS_VERSION "49.0" + /* Java class file constants **************************************************/ -#define MAGIC 0xcafebabe -#define MINOR_VERSION 3 -#define MAJOR_VERSION 45 +#define MAGIC 0xCAFEBABE +#define MAJOR_VERSION 49 +#define MINOR_VERSION 0 + + +/* Constant pool tags *********************************************************/ #define CONSTANT_Class 7 #define CONSTANT_Fieldref 9 @@ -102,213 +166,86 @@ void cacao_shutdown(s4 status); #define CONSTANT_NameAndType 12 #define CONSTANT_Utf8 1 -#define CONSTANT_Arraydescriptor 13 #define CONSTANT_UNUSED 0 -#define ACC_PUBLIC 0x0001 -#define ACC_PRIVATE 0x0002 -#define ACC_PROTECTED 0x0004 -#define ACC_STATIC 0x0008 -#define ACC_FINAL 0x0010 -#define ACC_SYNCHRONIZED 0x0020 -#define ACC_VOLATILE 0x0040 -#define ACC_TRANSIENT 0x0080 -#define ACC_NATIVE 0x0100 -#define ACC_INTERFACE 0x0200 -#define ACC_ABSTRACT 0x0400 - - -/* resolve typedef cycles *****************************************************/ - -typedef struct utf utf; -typedef struct literalstring literalstring; -typedef struct java_objectheader java_objectheader; -typedef struct classinfo classinfo; -typedef struct vftbl vftbl; -typedef u1* methodptr; - - -/* constant pool entries ******************************************************* - - All constant pool entries need a data structure which contain the entrys - value. In some cases this structure exist already, in the remaining cases - this structure must be generated: - - kind structure generated? - ---------------------------------------------------------------------- - CONSTANT_Class classinfo no - CONSTANT_Fieldref constant_FMIref yes - CONSTANT_Methodref constant_FMIref yes - CONSTANT_InterfaceMethodref constant_FMIref yes - CONSTANT_String unicode no - CONSTANT_Integer constant_integer yes - CONSTANT_Float constant_float yes - CONSTANT_Long constant_long yes - CONSTANT_Double constant_double yes - CONSTANT_NameAndType constant_nameandtype yes - CONSTANT_Utf8 unicode no - CONSTANT_Arraydescriptor constant_arraydescriptor yes - CONSTANT_UNUSED - - -*******************************************************************************/ - -/* data structures for hashtables ******************************************** - - - All utf-symbols, javastrings and classes are stored in global hashtables, - so every symbol exists only once. Equal symbols have identical pointers. - The functions for adding hashtable elements search the table for the - element with the specified name/text and return it on success. Otherwise a - new hashtable element is created. - - The hashtables use external linking for handling collisions. The hashtable - structure contains a pointer to the array of hashtable slots. The - number of hashtable slots and therefore the size of this array is specified - by the element of hashtable structure. contains the number - of all hashtable elements stored in the table, including those in the - external chains. - The hashtable element structures (utf, literalstring, classinfo) contain - both a pointer to the next hashtable element as a link for the external hash - chain and the key of the element. The key is computed from the text of - the string or the classname by using up to 8 characters. - - If the number of entries in the hashtable exceeds twice the size of the - hashtableslot-array it is supposed that the average length of the - external chains has reached a value beyond 2. Therefore the functions for - adding hashtable elements (utf_new, class_new, literalstring_new) double - the hashtableslot-array. In this restructuring process all elements have - to be inserted into the new hashtable and new external chains must be built. - - -example for the layout of a hashtable: - -hashtable.ptr--> +-------------------+ - | | - ... - | | - +-------------------+ +-------------------+ +-------------------+ - | hashtable element |-->| hashtable element |-->| hashtable element |-->NULL - +-------------------+ +-------------------+ +-------------------+ - | hashtable element | - +-------------------+ +-------------------+ - | hashtable element |-->| hashtable element |-->NULL - +-------------------+ +-------------------+ - | hashtable element |-->NULL - +-------------------+ - | | - ... - | | - +-------------------+ - -*/ - - -/* data structure for utf8 symbols ********************************************/ - -struct utf { - utf *hashlink; /* link for external hash chain */ - int blength; /* text length in bytes */ - char *text; /* pointer to text */ -}; - -/* data structure of internal javastrings stored in global hashtable **********/ -struct literalstring { - literalstring *hashlink; /* link for external hash chain */ - java_objectheader *string; +/* Class/Field/Method access and property flags *******************************/ + +#define ACC_UNDEF -1 /* used internally */ +#define ACC_NONE 0 /* used internally */ + +#define ACC_PUBLIC 0x0001 +#define ACC_PRIVATE 0x0002 +#define ACC_PROTECTED 0x0004 +#define ACC_STATIC 0x0008 +#define ACC_FINAL 0x0010 +#define ACC_SUPER 0x0020 +#define ACC_SYNCHRONIZED 0x0020 +#define ACC_VOLATILE 0x0040 +#define ACC_BRIDGE 0x0040 +#define ACC_TRANSIENT 0x0080 +#define ACC_VARARGS 0x0080 +#define ACC_NATIVE 0x0100 +#define ACC_INTERFACE 0x0200 +#define ACC_ABSTRACT 0x0400 +#define ACC_STRICT 0x0800 +#define ACC_SYNTHETIC 0x1000 +#define ACC_ANNOTATION 0x2000 +#define ACC_ENUM 0x4000 + + +/* data structure for calls from c code to java methods */ + +struct jni_callblock { + u8 itemtype; + u8 item; }; -/* data structure for accessing hashtables ************************************/ - -typedef struct { - u4 size; - u4 entries; /* number of entries in the table */ - void **ptr; /* pointer to hashtable */ -} hashtable; - -/* data structures of remaining constant pool entries *************************/ - -typedef struct { /* Fieldref, Methodref and InterfaceMethodref */ - classinfo *class; /* class containing this field/method/interface */ - utf *name; /* field/method/interface name */ - utf *descriptor; /* field/method/interface type descriptor string */ -} constant_FMIref; - -typedef struct { /* Integer */ - s4 value; -} constant_integer; - -typedef struct { /* Float */ - float value; -} constant_float; - -typedef struct { /* Long */ - s8 value; -} constant_long; - -typedef struct { /* Double */ - double value; -} constant_double; - -typedef struct { /* NameAndType (Field or Method) */ - utf *name; /* field/method name */ - utf *descriptor; /* field/method type descriptor string */ -} constant_nameandtype; - -/* arraydescriptor describes array types. Basic array types contain their - type in the arraytype field, objectclass contains a class pointer for - arrays of objects (arraytype == ARRAYTYPE_OBJECT), elementdescriptor - contains a pointer to an arraydescriptor which describes the element - types in the case of arrays of arrays (arraytype == ARRAYTYPE_ARRAY). -*/ - -typedef struct constant_arraydescriptor { - int arraytype; - classinfo *objectclass; - struct constant_arraydescriptor *elementdescriptor; -} constant_arraydescriptor; +typedef struct jni_callblock jni_callblock; /* data structures of the runtime system **************************************/ -/* objects ********************************************************************* +/* java_objectheader *********************************************************** - All objects (and arrays) which resides on the heap need the following - header at the beginning of the data structure. -*/ + All objects (and arrays) which resides on the heap need the + following header at the beginning of the data structure. + +*******************************************************************************/ struct java_objectheader { /* header for all objects */ - vftbl *vftbl; /* pointer to virtual function table */ + struct _vftbl *vftbl; /* pointer to virtual function table */ +#if defined(USE_THREADS) && defined(NATIVE_THREADS) + void *monitorPtr; +#endif }; - /* arrays ********************************************************************** - All arrays are objects (they need the object header with a pointer to a - vvftbl (array class table). There is only one class for all arrays. The - type of an array is stored directly in the array object. Following types - are defined: + All arrays are objects (they need the object header with a pointer + to a vftbl (array class table). There is one class for each array + type. The array type is described by an arraydescriptor struct + which is referenced by the vftbl. */ -#define ARRAYTYPE_INT 0 -#define ARRAYTYPE_LONG 1 -#define ARRAYTYPE_FLOAT 2 -#define ARRAYTYPE_DOUBLE 3 -#define ARRAYTYPE_BYTE 4 -#define ARRAYTYPE_CHAR 5 -#define ARRAYTYPE_SHORT 6 -#define ARRAYTYPE_BOOLEAN 7 -#define ARRAYTYPE_OBJECT 8 -#define ARRAYTYPE_ARRAY 9 +/* CAUTION: Don't change the numerical values! These constants (with + * the exception of ARRAYTYPE_OBJECT) are used as indices in the + * primitive type table. + */ +#define ARRAYTYPE_INT PRIMITIVETYPE_INT +#define ARRAYTYPE_LONG PRIMITIVETYPE_LONG +#define ARRAYTYPE_FLOAT PRIMITIVETYPE_FLOAT +#define ARRAYTYPE_DOUBLE PRIMITIVETYPE_DOUBLE +#define ARRAYTYPE_BYTE PRIMITIVETYPE_BYTE +#define ARRAYTYPE_CHAR PRIMITIVETYPE_CHAR +#define ARRAYTYPE_SHORT PRIMITIVETYPE_SHORT +#define ARRAYTYPE_BOOLEAN PRIMITIVETYPE_BOOLEAN +#define ARRAYTYPE_OBJECT PRIMITIVETYPE_VOID /* don't use as index! */ typedef struct java_arrayheader { /* header for all arrays */ java_objectheader objheader; /* object header */ s4 size; /* array size */ -#ifdef SIZE_FROM_CLASSINFO - s4 alignedsize; /* phil */ -#endif - s4 arraytype; /* array type from previous list */ } java_arrayheader; @@ -361,328 +298,51 @@ typedef struct java_longarray { /* objectarray and arrayarray need identical memory layout (access methods use the same machine code */ -typedef struct java_objectarray { - java_arrayheader header; - classinfo *elementtype; +struct java_objectarray { + java_arrayheader header; java_objectheader *data[1]; -} java_objectarray; - -typedef struct java_arrayarray { - java_arrayheader header; - constant_arraydescriptor *elementdescriptor; - java_arrayheader *data[1]; -} java_arrayarray; - - -/* structure for primitive classes ********************************************/ - -typedef struct primitivetypeinfo { - classinfo *class_wrap; /* class for wrapping primitive type */ - classinfo *class_primitive; /* primitive class */ - char *wrapname; /* name of class for wrapping */ - char typesig; /* one character type signature */ - char *name; /* name of primitive class */ -} primitivetypeinfo; - -/* field, method and class structures *****************************************/ - -/* fieldinfo ******************************************************************/ - -typedef struct fieldinfo {/* field of a class */ - s4 flags; /* ACC flags */ - s4 type; /* basic data type */ - utf *name; /* name of field */ - utf *descriptor; /* JavaVM descriptor string of field */ - - s4 offset; /* offset from start of object (instance variables) */ - - union { /* storage for static values (class variables) */ - s4 i; - s8 l; - float f; - double d; - void *a; - } value; - -} fieldinfo; - -struct basicblock; - -/* exceptiontable *************************************************************/ - -typedef struct xtable { /* exceptiontable entry in a method */ - s4 startpc; /* start pc of guarded area (inclusive) */ - struct basicblock *start; - - s4 endpc; /* end pc of guarded area (exklusive) */ - struct basicblock *end; - - s4 handlerpc; /* pc of exception handler */ - struct basicblock *handler; - - classinfo *catchtype; /* catchtype of exception (NULL == catchall) */ - struct xtable *next; /* used to build a list of exception when */ - /* loops are copied */ - struct xtable *down; /* instead of the old array, a list is used */ -} xtable; - - -typedef struct exceptiontable { /* exceptiontable entry in a method */ - s4 startpc; /* start pc of guarded area (inclusive) */ - s4 endpc; /* end pc of guarded area (exklusive) */ - s4 handlerpc; /* pc of exception handler */ - classinfo *catchtype; /* catchtype of exception (NULL == catchall) */ -} exceptiontable; - - -/* methodinfo *****************************************************************/ - -typedef struct methodinfo { /* method structure */ - s4 flags; /* ACC flags */ - utf *name; /* name of method */ - utf *descriptor; /* JavaVM descriptor string of method */ - s4 returntype; /* only temporary valid, return type */ - s4 paramcount; /* only temporary valid, parameter count */ - u1 *paramtypes; /* only temporary valid, parameter types */ - classinfo *class; /* class, the method belongs to */ - s4 vftblindex; /* index of method in virtual function table - (if it is a virtual method) */ - s4 maxstack; /* maximum stack depth of method */ - s4 maxlocals; /* maximum number of local variables */ - s4 jcodelength; /* length of JavaVM code */ - u1 *jcode; /* pointer to JavaVM code */ - - s4 exceptiontablelength;/* exceptiontable length */ - exceptiontable *exceptiontable; - /* the exceptiontable */ - - u1 *stubroutine; /* stub for compiling or calling natives */ - s4 mcodelength; /* legth of generated machine code */ - u1 *mcode; /* pointer to machine code */ - u1 *entrypoint; /* entry point in machine code */ - - s4 methodUsed; /* -1=marked (might be used) 0=not used 1=used CO-RT*/ - s4 numSubDefs; /* # sub definitions marked USED */ - - s4 natCalls; /* number of methods calls */ - -// methodinfo *natCalledMethods; /* methods called table */ - - s4 XTAclasscount; /* number of classes in XTA class set */ - classinfo *XTAclassSet; /* XTA class set*/ - - -} methodinfo; - - -/* innerclassinfo *************************************************************/ - -typedef struct innerclassinfo { - classinfo *inner_class; /* inner class pointer */ - classinfo *outer_class; /* outer class pointer */ - utf *name; /* innerclass name */ - s4 flags; /* ACC flags */ -} innerclassinfo; - -/* classinfo ******************************************************************/ - -struct classinfo { /* class structure */ - java_objectheader header; /* classes are also objects */ - - s4 flags; /* ACC flags */ - utf *name; /* class name */ - - s4 cpcount; /* number of entries in constant pool */ - u1 *cptags; /* constant pool tags */ - voidptr *cpinfos; /* pointer to constant pool info structures */ - - classinfo *super; /* super class pointer */ - classinfo *sub; /* sub class pointer */ - classinfo *nextsub; /* pointer to next class in sub class list */ - - s4 interfacescount; /* number of interfaces */ - classinfo **interfaces; /* pointer to interfaces */ - - s4 fieldscount; /* number of fields */ - fieldinfo *fields; /* field table */ - - s4 methodscount; /* number of methods */ - methodinfo *methods; /* method table */ - - listnode listnode; /* linkage */ - - bool initialized; /* true, if class already initialised */ - bool linked; /* true, if class already linked */ - s4 index; /* hierarchy depth (classes) or index - (interfaces) */ - s4 instancesize; /* size of an instance of this class */ -#ifdef SIZE_FROM_CLASSINFO - s4 alignedsize; /* size of an instance, aligned to the - allocation size on the heap */ -#endif - - vftbl *vftbl; /* pointer to virtual function table */ - - methodinfo *finalizer; /* finalizer method */ -#ifdef JIT_MARKER_SUPPORT - methodinfo *marker; -#endif - - u2 innerclasscount; /* number of inner classes */ - innerclassinfo *innerclass; - - classinfo *hashlink; /* link for external hash chain */ - bool classvftbl; /* has its own copy of the Class vtbl */ - - s4 classUsed; /* 0= not used 1 = used CO-RT */ - - classinfo *impldBy; /* implemented by class pointer */ - classinfo *nextimpldBy; /* ptr to next class in impldBy class list */ - }; -/* virtual function table ****************************************************** - - The vtbl has a bidirectional layout with open ends at both sides. - interfacetablelength gives the number of entries of the interface table at - the start of the vftbl. The vftbl pointer points to &interfacetable[0]. - vftbllength gives the number of entries of table at the end of the vftbl. - - runtime type check (checkcast): - - Different methods are used for runtime type check depending on the - argument of checkcast/instanceof. - - A check against a class is implemented via relative numbering on the class - hierachy tree. The tree is numbered in a depth first traversal setting - the base field and the diff field. The diff field gets the result of - (high - base) so that a range check can be implemented by an unsigned - compare. A sub type test is done by checking the inclusion of base of - the sub class in the range of the superclass. - - A check against an interface is implemented via the interfacevftbl. If the - interfacevftbl contains a nonnull value a class is a subclass of this - interface. - - interfacetable: - - Like standard virtual methods interface methods are called using - virtual function tables. All interfaces are numbered sequentially - (starting with zero). For each class there exist an interface table - of virtual function tables for each implemented interface. The length - of the interface table is determined by the highest number of an - implemented interface. - - The following example assumes a class which implements interface 0 and 3: - - interfacetablelength = 4 - - | ... | +----------+ - +-----------+ | method 2 |---> method z - | class | | method 1 |---> method y - +-----------+ | method 0 |---> method x - | ivftbl 0 |----------> +----------+ - vftblptr ---> +-----------+ - | ivftbl -1 |--> NULL +----------+ - | ivftbl -2 |--> NULL | method 1 |---> method x - | ivftbl -3 |-----+ | method 0 |---> method a - +-----------+ +----> +----------+ - - +---------------+ - | length 3 = 2 | - | length 2 = 0 | - | length 1 = 0 | - | length 0 = 3 | - interfacevftbllength ---> +---------------+ - -*******************************************************************************/ - -struct vftbl { - methodptr *interfacetable[1]; /* interface table (access via macro) */ - - classinfo *class; /* class, the vtbl belongs to */ - - s4 vftbllength; /* virtual function table length */ - s4 interfacetablelength; /* interface table length */ - - s4 baseval; /* base for runtime type check */ - s4 diffval; /* high - base for runtime type check */ - - s4 *interfacevftbllength; /* length of interface vftbls */ - - methodptr table[1]; /* class vftbl */ -}; - #define VFTBLINTERFACETABLE(v,i) (v)->interfacetable[-i] -/* references to some system classes ******************************************/ - -extern classinfo *class_java_lang_Object; -extern classinfo *class_java_lang_String; -extern classinfo *class_java_lang_ClassCastException; -extern classinfo *class_java_lang_NullPointerException; -extern classinfo *class_java_lang_ArrayIndexOutOfBoundsException; -extern classinfo *class_java_lang_NegativeArraySizeException; -extern classinfo *class_java_lang_OutOfMemoryError; -extern classinfo *class_java_lang_ArithmeticException; -extern classinfo *class_java_lang_ArrayStoreException; -extern classinfo *class_java_lang_ThreadDeath; -extern classinfo *class_array; - -/* instances of some system classes *******************************************/ - -extern java_objectheader *proto_java_lang_ClassCastException; -extern java_objectheader *proto_java_lang_NullPointerException; -extern java_objectheader *proto_java_lang_ArrayIndexOutOfBoundsException; -extern java_objectheader *proto_java_lang_NegativeArraySizeException; -extern java_objectheader *proto_java_lang_OutOfMemoryError; -extern java_objectheader *proto_java_lang_ArithmeticException; -extern java_objectheader *proto_java_lang_ArrayStoreException; -extern java_objectheader *proto_java_lang_ThreadDeath; - - /* flag variables *************************************************************/ -extern bool compileall; -extern bool runverbose; -extern bool verbose; -extern bool opt_rt; /* Rapid Type Analysis for better inlining CO-RT*/ -extern bool opt_xta; /* X Type Analysis for better inlining CO-XTA*/ +extern bool cacao_initializing; -extern int pClassHeir; -extern int pCallgraph; -extern int pOpcodes; -extern int pStats; -extern void RT_jit_parse(methodinfo *m); -extern void printCallgraph (); -extern void printRThierarchyInfo(methodinfo *m); -extern void printObjectClassHeirarchy(); +/* Synchronization ************************************************************/ -extern void XTA_jit_parse(methodinfo *m); +#if defined(USE_THREADS) && defined(NATIVE_THREADS) +void cast_lock(); +void cast_unlock(); +void compiler_lock(); +void compiler_unlock(); +#endif -/* statistic variables ********************************************************/ -extern int count_class_infos; -extern int count_const_pool_len; -extern int count_vftbl_len; -extern int count_utf_len; -extern int count_all_methods; -extern int count_vmcode_len; -extern int count_extable_len; -extern int count_class_loads; -extern int count_class_inits; -extern int count_utf_new; -extern int count_utf_new_found; +/**** Methods: called directly by cacao, which defines the callpath ***/ +#define MAINCLASS mainstring +#define MAINMETH "main" +#define MAINDESC "([Ljava/lang/String;)V" -/* table of primitive types ***************************************************/ +#define EXITCLASS "java/lang/System" +#define EXITMETH "exit" +#define EXITDESC "(I)V" -extern primitivetypeinfo primitivetype_table[PRIMITIVETYPE_COUNT]; +#if defined(USE_THREADS) + #define THREADCLASS "java/lang/Thread" + #define THREADMETH "" + #define THREADDESC "(Ljava/lang/VMThread;Ljava/lang/String;IZ)V" + #define THREADGROUPCLASS "java/lang/ThreadGroup" + #define THREADGROUPMETH "addThread" + #define THREADGROUPDESC "(Ljava/lang/Thread;)V" #endif +#endif /* _GLOBAL_H */ + /* * These are local overrides for various environment variables in Emacs.