Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: global.h 8060 2007-06-10 20:00:40Z twisti $
-
*/
/* alignment macros ***********************************************************/
-#define ALIGN_2(a) do { if ((a) & 0x1) (a)++; } while (0)
+#define ALIGN_EVEN(a) ((a) = (((a) + 1) & ~1))
+#define ALIGN_ODD(a) ((a) = (a) | 1 )
+
+#define ALIGN_2(a) ALIGN_EVEN(a)
/* forward typedefs ***********************************************************/
-typedef struct java_objectheader java_objectheader;
-typedef struct java_objectarray java_objectarray;
+typedef struct java_object_t java_object_t;
+typedef struct java_objectarray_t java_objectarray_t;
#define MAX_ALIGN 8 /* most generic alignment for JavaVM values */
#define ACC_CLASS_REFLECT_MASK 0x0000ffff/* flags reported by reflection */
-#define ACC_CLASS_PRIMITIVE 0x00010000/* class is a primitive class */
-#define ACC_CLASS_HAS_POINTERS 0x00020000/* instance contains pointers */
-#define ACC_CLASS_SOFT_REFERENCE 0x00040000
-#define ACC_CLASS_WEAK_REFERENCE 0x00080000
-#define ACC_CLASS_PHANTOM_REFERENCE 0x00100000
+#define ACC_CLASS_PRIMITIVE 0x00010000
+#define ACC_CLASS_MEMBER 0x00020000
+#define ACC_CLASS_ANONYMOUS 0x00040000
+
+#define ACC_CLASS_HAS_POINTERS 0x00080000/* instance contains pointers */
+
+#define ACC_CLASS_REFERENCE_MASK 0x00700000
+#define ACC_CLASS_REFERENCE_SOFT 0x00100000
+#define ACC_CLASS_REFERENCE_WEAK 0x00200000
+#define ACC_CLASS_REFERENCE_PHANTOM 0x00400000
/* special flags used in methodinfo *******************************************/
-#define ACC_METHOD_IMPLEMENTED 0x00010000 /* there is an implementation */
-#define ACC_METHOD_MONOMORPHIC 0x00020000 /* currently monomorphic method */
+#define ACC_METHOD_BUILTIN 0x00010000 /* use for descriptor parsing */
+#define ACC_METHOD_IMPLEMENTED 0x00020000 /* there is an implementation */
+#define ACC_METHOD_MONOMORPHIC 0x00040000 /* currently monomorphic method */
/* data structures of the runtime system **************************************/
-/* java_objectheader ***********************************************************
+/* java_object_t ***************************************************************
All objects (and arrays) which resides on the heap need the
following header at the beginning of the data structure.
#define HDRFLAG_FLC 0x01
-struct java_objectheader { /* header for all objects */
+struct java_object_t { /* header for all objects */
struct _vftbl *vftbl; /* pointer to virtual function table */
#if defined(ENABLE_THREADS)
struct lock_record_t *monitorPtr;
which is referenced by the vftbl.
*/
-typedef struct java_arrayheader { /* header for all arrays */
- java_objectheader objheader; /* object header */
+typedef struct java_array_t { /* header for all arrays */
+ java_object_t objheader; /* object header */
s4 size; /* array size */
-} java_arrayheader;
+} java_array_t;
/* booleanarray and bytearray need identical memory layout (access methods
use the same machine code */
-typedef struct java_booleanarray {
- java_arrayheader header;
+typedef struct java_booleanarray_t {
+ java_array_t header;
u1 data[1];
-} java_booleanarray;
+} java_booleanarray_t;
-typedef struct java_bytearray {
- java_arrayheader header;
+typedef struct java_bytearray_t {
+ java_array_t header;
s1 data[1];
-} java_bytearray;
+} java_bytearray_t;
-typedef struct java_chararray {
- java_arrayheader header;
+typedef struct java_chararray_t {
+ java_array_t header;
u2 data[1];
-} java_chararray;
+} java_chararray_t;
-typedef struct java_shortarray {
- java_arrayheader header;
+typedef struct java_shortarray_t {
+ java_array_t header;
s2 data[1];
-} java_shortarray;
+} java_shortarray_t;
-typedef struct java_intarray {
- java_arrayheader header;
+typedef struct java_intarray_t {
+ java_array_t header;
s4 data[1];
-} java_intarray;
+} java_intarray_t;
-typedef struct java_longarray {
- java_arrayheader header;
+typedef struct java_longarray_t {
+ java_array_t header;
s8 data[1];
-} java_longarray;
+} java_longarray_t;
-typedef struct java_floatarray {
- java_arrayheader header;
+typedef struct java_floatarray_t {
+ java_array_t header;
float data[1];
-} java_floatarray;
+} java_floatarray_t;
-typedef struct java_doublearray {
- java_arrayheader header;
+typedef struct java_doublearray_t {
+ java_array_t header;
double data[1];
-} java_doublearray;
+} java_doublearray_t;
/* objectarray and arrayarray need identical memory layout (access methods
use the same machine code */
-struct java_objectarray {
- java_arrayheader header;
- java_objectheader *data[1];
+struct java_objectarray_t {
+ java_array_t header;
+ java_object_t *data[1];
};
+/* java_handle_t ***************************************************************
+
+ TODO: document me!
+
+*******************************************************************************/
+
+#if 0
+typedef struct java_handle_t {
+ java_object_t *heap_object;
+} java_handle_t;
+#elseif 0
+typedef union {
+ java_object_t object;
+ java_array_t array;
+} java_handle_t;
+#else
+typedef java_object_t java_handle_t;
+typedef java_objectarray_t java_handle_objectarray_t;
+typedef java_booleanarray_t java_handle_booleanarray_t;
+typedef java_bytearray_t java_handle_bytearray_t;
+typedef java_chararray_t java_handle_chararray_t;
+typedef java_shortarray_t java_handle_shortarray_t;
+typedef java_intarray_t java_handle_intarray_t;
+typedef java_longarray_t java_handle_longarray_t;
+typedef java_floatarray_t java_handle_floatarray_t;
+typedef java_doublearray_t java_handle_doublearray_t;
+#endif
+
+
/* global constants related to the verifier ***********************************/
/* The verifier needs additional variables in the variable array. Since these */