CACAO
Data Structures | Macros | Typedefs | Enumerations
global.hpp File Reference

Go to the source code of this file.

Data Structures

union  imm_union
 
struct  java_object_t
 
struct  java_array_t
 
struct  java_booleanarray_t
 
struct  java_bytearray_t
 
struct  java_chararray_t
 
struct  java_shortarray_t
 
struct  java_intarray_t
 
struct  java_longarray_t
 
struct  java_floatarray_t
 
struct  java_doublearray_t
 
struct  java_objectarray_t
 

Macros

#define ALIGN_EVEN(a)   ((a) = (((a) + 1) & ~1))
 
#define ALIGN_ODD(a)   ((a) = (a) | 1 )
 
#define ALIGN_2(a)   ALIGN_EVEN(a)
 
#define PRINTF_INTPTR_NUM_HEXDIGITS   "16"
 
#define STR(a)   #a
 
#define MIN(a, b)   (((a) < (b)) ? (a) : (b))
 
#define MAX(a, b)   (((a) > (b)) ? (a) : (b))
 
#define MAX_ALIGN   8 /* most generic alignment for JavaVM values */
 
#define IS_INT_LNG_TYPE(a)   (!((a) & TYPE_FLT))
 
#define IS_FLT_DBL_TYPE(a)   ((a) & TYPE_FLT)
 
#define IS_2_WORD_TYPE(a)   ((a) & TYPE_LNG)
 
#define IS_INT_TYPE(a)   ((a) == TYPE_INT)
 
#define IS_LNG_TYPE(a)   ((a) == TYPE_LNG)
 
#define IS_FLT_TYPE(a)   ((a) == TYPE_FLT)
 
#define IS_DBL_TYPE(a)   ((a) == TYPE_DBL)
 
#define IS_ADR_TYPE(a)   ((a) == TYPE_ADR)
 
#define IS_VOID_TYPE(a)   ((a) == TYPE_VOID)
 
#define JAVA_VERSION   "1.6.0" /* this version is supported by CACAO */
 
#define CLASS_VERSION   "51.0"
 
#define MAGIC   0xCAFEBABE
 
#define MAJOR_VERSION   51
 
#define MINOR_VERSION   0
 
#define VERIFIER_EXTRA_LOCALS   1
 
#define VERIFIER_EXTRA_VARS   1
 
#define STACK_EXTRA_VARS   0
 

Typedefs

typedef void(* functionptr )(void)
 
typedef u1methodptr
 
typedef struct java_array_t java_array_t
 
typedef struct java_booleanarray_t java_booleanarray_t
 
typedef struct java_bytearray_t java_bytearray_t
 
typedef struct java_chararray_t java_chararray_t
 
typedef struct java_shortarray_t java_shortarray_t
 
typedef struct java_intarray_t java_intarray_t
 
typedef struct java_longarray_t java_longarray_t
 
typedef struct java_floatarray_t java_floatarray_t
 
typedef struct java_doublearray_t java_doublearray_t
 
typedef java_object_t java_handle_t
 
typedef java_handle_t java_handle_array_t
 
typedef java_handle_array_t java_handle_objectarray_t
 
typedef java_handle_array_t java_handle_booleanarray_t
 
typedef java_handle_array_t java_handle_bytearray_t
 
typedef java_handle_array_t java_handle_chararray_t
 
typedef java_handle_array_t java_handle_shortarray_t
 
typedef java_handle_array_t java_handle_intarray_t
 
typedef java_handle_array_t java_handle_longarray_t
 
typedef java_handle_array_t java_handle_floatarray_t
 
typedef java_handle_array_t java_handle_doublearray_t
 

Enumerations

enum  Type {
  TYPE_INT = 0, TYPE_LNG = 1, TYPE_FLT = 2, TYPE_DBL = 3,
  TYPE_ADR = 4, TYPE_RET = 8, TYPE_VOID = 10
}
 Types used internally by JITTED code. More...
 
enum  ConstantPoolTag {
  CONSTANT_Class = 7, CONSTANT_Fieldref = 9, CONSTANT_Methodref = 10, CONSTANT_InterfaceMethodref = 11,
  CONSTANT_String = 8, CONSTANT_Integer = 3, CONSTANT_Float = 4, CONSTANT_Long = 5,
  CONSTANT_Double = 6, CONSTANT_NameAndType = 12, CONSTANT_Utf8 = 1, CONSTANT_MethodHandle = 15,
  CONSTANT_MethodType = 16, CONSTANT_InvokeDynamic = 18, CONSTANT_ClassName = 19, CONSTANT_UNUSED = 0
}
 Types for entries of a classes constant pool. More...
 
enum  {
  ACC_UNDEF = -1, ACC_NONE = 0, ACC_PUBLIC = 0x0001, ACC_PRIVATE = 0x0002,
  ACC_PROTECTED = 0x0004, ACC_STATIC = 0x0008, ACC_FINAL = 0x0010, ACC_SUPER = 0x0020,
  ACC_SYNCHRONIZED = 0x0020, ACC_VOLATILE = 0x0040, ACC_BRIDGE = 0x0040, ACC_TRANSIENT = 0x0080,
  ACC_VARARGS = 0x0080, ACC_NATIVE = 0x0100, ACC_INTERFACE = 0x0200, ACC_ABSTRACT = 0x0400,
  ACC_STRICT = 0x0800, ACC_SYNTHETIC = 0x1000, ACC_ANNOTATION = 0x2000, ACC_ENUM = 0x4000,
  ACC_MIRANDA = 0x8000
}
 
enum  ClassFlag {
  ACC_CLASS_REFLECT_MASK = 0x0000ffff, ACC_CLASS_PRIMITIVE = 0x00010000, ACC_CLASS_MEMBER = 0x00020000, ACC_CLASS_ANONYMOUS = 0x00040000,
  ACC_CLASS_HAS_POINTERS = 0x00080000, ACC_CLASS_REFERENCE_MASK = 0x00700000, ACC_CLASS_REFERENCE_SOFT = 0x00100000, ACC_CLASS_REFERENCE_WEAK = 0x00200000,
  ACC_CLASS_REFERENCE_PHANTOM = 0x00400000
}
 
enum  MethodFlag {
  ACC_METHOD_BUILTIN = 0x00010000, ACC_METHOD_IMPLEMENTED = 0x00020000, ACC_METHOD_MONOMORPHIC = 0x00040000, ACC_METHOD_EA = 0x00080000,
  ACC_METHOD_MONOMORPHY_USED = 0x00100000, ACC_METHOD_PARENT_MONOMORPHY_USED = 0x00200000
}
 
enum  HeaderFlag {
  HDRFLAG_MARK1 = 0x02, HDRFLAG_MARK2 = 0x04, HDRFLAG_UNCOLLECTABLE = 0x08, HDRFLAG_HASH_TAKEN = 0x10,
  HDRFLAG_HASH_ATTACHED = 0x20, HDRFLAG_REFERENCING = 0x40
}
 All objects (and arrays) which resides on the heap need the following header at the beginning of the data structure. More...
 

Macro Definition Documentation

#define ALIGN_2 (   a)    ALIGN_EVEN(a)

Definition at line 72 of file global.hpp.

#define ALIGN_EVEN (   a)    ((a) = (((a) + 1) & ~1))

Definition at line 69 of file global.hpp.

#define ALIGN_ODD (   a)    ((a) = (a) | 1 )

Definition at line 70 of file global.hpp.

#define CLASS_VERSION   "51.0"

Definition at line 146 of file global.hpp.

#define IS_2_WORD_TYPE (   a)    ((a) & TYPE_LNG)

Definition at line 132 of file global.hpp.

#define IS_ADR_TYPE (   a)    ((a) == TYPE_ADR)

Definition at line 138 of file global.hpp.

#define IS_DBL_TYPE (   a)    ((a) == TYPE_DBL)

Definition at line 137 of file global.hpp.

#define IS_FLT_DBL_TYPE (   a)    ((a) & TYPE_FLT)

Definition at line 131 of file global.hpp.

#define IS_FLT_TYPE (   a)    ((a) == TYPE_FLT)

Definition at line 136 of file global.hpp.

#define IS_INT_LNG_TYPE (   a)    (!((a) & TYPE_FLT))

Definition at line 130 of file global.hpp.

#define IS_INT_TYPE (   a)    ((a) == TYPE_INT)

Definition at line 134 of file global.hpp.

#define IS_LNG_TYPE (   a)    ((a) == TYPE_LNG)

Definition at line 135 of file global.hpp.

#define IS_VOID_TYPE (   a)    ((a) == TYPE_VOID)

Definition at line 140 of file global.hpp.

#define JAVA_VERSION   "1.6.0" /* this version is supported by CACAO */

Definition at line 145 of file global.hpp.

#define MAGIC   0xCAFEBABE

Definition at line 150 of file global.hpp.

#define MAJOR_VERSION   51

Definition at line 151 of file global.hpp.

#define MAX (   a,
 
)    (((a) > (b)) ? (a) : (b))

Definition at line 99 of file global.hpp.

#define MAX_ALIGN   8 /* most generic alignment for JavaVM values */

Definition at line 102 of file global.hpp.

#define MIN (   a,
 
)    (((a) < (b)) ? (a) : (b))

Definition at line 95 of file global.hpp.

#define MINOR_VERSION   0

Definition at line 152 of file global.hpp.

#define PRINTF_INTPTR_NUM_HEXDIGITS   "16"

Definition at line 80 of file global.hpp.

#define STACK_EXTRA_VARS   0

Definition at line 375 of file global.hpp.

#define STR (   a)    #a

Definition at line 90 of file global.hpp.

#define VERIFIER_EXTRA_LOCALS   1

Definition at line 373 of file global.hpp.

#define VERIFIER_EXTRA_VARS   1

Definition at line 374 of file global.hpp.

Typedef Documentation

typedef void(* functionptr)(void)

Definition at line 39 of file global.hpp.

typedef struct java_array_t java_array_t

Definition at line 353 of file global.hpp.

Definition at line 355 of file global.hpp.

Definition at line 356 of file global.hpp.

Definition at line 357 of file global.hpp.

Definition at line 362 of file global.hpp.

Definition at line 361 of file global.hpp.

Definition at line 359 of file global.hpp.

Definition at line 360 of file global.hpp.

Definition at line 354 of file global.hpp.

Definition at line 358 of file global.hpp.

Definition at line 352 of file global.hpp.

typedef u1* methodptr

Definition at line 40 of file global.hpp.

Enumeration Type Documentation

anonymous enum
Enumerator
ACC_UNDEF 
ACC_NONE 
ACC_PUBLIC 
ACC_PRIVATE 
ACC_PROTECTED 
ACC_STATIC 
ACC_FINAL 
ACC_SUPER 
ACC_SYNCHRONIZED 
ACC_VOLATILE 
ACC_BRIDGE 
ACC_TRANSIENT 
ACC_VARARGS 
ACC_NATIVE 
ACC_INTERFACE 
ACC_ABSTRACT 
ACC_STRICT 
ACC_SYNTHETIC 
ACC_ANNOTATION 
ACC_ENUM 
ACC_MIRANDA 

Definition at line 187 of file global.hpp.

enum ClassFlag
Enumerator
ACC_CLASS_REFLECT_MASK 
ACC_CLASS_PRIMITIVE 
ACC_CLASS_MEMBER 
ACC_CLASS_ANONYMOUS 
ACC_CLASS_HAS_POINTERS 
ACC_CLASS_REFERENCE_MASK 
ACC_CLASS_REFERENCE_SOFT 
ACC_CLASS_REFERENCE_WEAK 
ACC_CLASS_REFERENCE_PHANTOM 

Definition at line 214 of file global.hpp.

Types for entries of a classes constant pool.

C++11:
Use an enum class and set storage type to uint8_t
Enumerator
CONSTANT_Class 

official tags from JVM spec

CONSTANT_Fieldref 
CONSTANT_Methodref 
CONSTANT_InterfaceMethodref 
CONSTANT_String 
CONSTANT_Integer 
CONSTANT_Float 
CONSTANT_Long 
CONSTANT_Double 
CONSTANT_NameAndType 
CONSTANT_Utf8 
CONSTANT_MethodHandle 
CONSTANT_MethodType 
CONSTANT_InvokeDynamic 
CONSTANT_ClassName 

internally used tags

CONSTANT_UNUSED 

Definition at line 162 of file global.hpp.

enum HeaderFlag

All objects (and arrays) which resides on the heap need the following header at the beginning of the data structure.

TODO: Include detailed description from the Wiki (ObjectHeader) here.

C++11:
Use an enum class for better scoping.
Enumerator
HDRFLAG_MARK1 
HDRFLAG_MARK2 
HDRFLAG_UNCOLLECTABLE 
HDRFLAG_HASH_TAKEN 
HDRFLAG_HASH_ATTACHED 
HDRFLAG_REFERENCING 

Definition at line 252 of file global.hpp.

enum MethodFlag
Enumerator
ACC_METHOD_BUILTIN 
ACC_METHOD_IMPLEMENTED 
ACC_METHOD_MONOMORPHIC 
ACC_METHOD_EA 
ACC_METHOD_MONOMORPHY_USED 
ACC_METHOD_PARENT_MONOMORPHY_USED 

Definition at line 231 of file global.hpp.

enum Type

Types used internally by JITTED code.

The JavaVM types must numbered in the same order as the ICMD_Ixxx to ICMD_Axxx instructions (LOAD and STORE). All other types can be numbered arbitrarily.

C++11:
Use an enum class for better scoping and control over storage type.
Enumerator
TYPE_INT 
TYPE_LNG 
TYPE_FLT 
TYPE_DBL 
TYPE_ADR 
TYPE_RET 
TYPE_VOID 

Definition at line 117 of file global.hpp.