Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Michael Starzinger
-
- $Id$
-
*/
#include "gc.h"
#include "region.h"
-
-
-
-/* TODO: maybe move this to global.h */
-#define GC_FLAG_FINALIZER 0x10
-#define GC_FLAG_UNCOLLECTABLE HDRFLAG_UNCOLLECTABLE
-#define GC_FLAG_MARKED (HDRFLAG_MARK1 | HDRFLAG_MARK2)
-
-#define GC_IS_MARKED(obj) GC_TEST_FLAGS(obj, GC_FLAG_MARKED)
-#define GC_SET_MARKED(obj) GC_SET_FLAGS(obj, GC_FLAG_MARKED)
-#define GC_CLEAR_MARKED(obj) GC_CLEAR_FLAGS(obj, GC_FLAG_MARKED)
+#include "vm/array.h" /* needed for ARRAYTYPE_OBJECT */
#define GC_SIZE_DUMMY 0xff
-
#if SIZEOF_VOID_P == 8
# define GC_GET_SIZE(obj) ((u4) (((obj)->hdrflags >> 56) & 0xff))
# define GC_SET_SIZE(obj, size) ((obj)->hdrflags |= ((u8) ((size) & 0xff)) << 56)
-# define GC_GET_HASH(obj) ((obj)->hdrflags)
#else
# define GC_GET_SIZE(obj) ((u4) (((obj)->hdrflags >> 24) & 0xff))
# define GC_SET_SIZE(obj, size) ((obj)->hdrflags |= ((u4) ((size) & 0xff)) << 24)
-# define GC_GET_HASH(obj) ((obj)->hdrflags)
-# define GC_SET_HASH(obj, hash) ((obj)->hdrflags |= ((hash) << 8) & 0x00ffff00)
#endif
-/*extern void *heap_base;
-extern void *heap_ptr;*/
extern s4 heap_current_size;
extern s4 heap_maximal_size;
-extern s4 heap_free_size;
-extern s4 heap_used_size;
extern regioninfo_t *heap_region_sys;
extern regioninfo_t *heap_region_main;
-s4 get_object_size(java_objectheader *o);
-
+s4 get_object_size(java_object_t *o);
#if !defined(NDEBUG)
-void heap_print_object(java_objectheader *o);
+void heap_println_usage();
+void heap_print_object(java_object_t *o);
void heap_dump_region(regioninfo_t *region, bool marked_only);
#endif
#define IS_ARRAY(o) ((o)->vftbl->arraydesc != NULL)
#define FOREACH_ARRAY_REF(o,ref,refptr,code) \
{ \
- java_objectarray *a = (java_objectarray *) o; \
- arraydescriptor *desc = o->vftbl->arraydesc; \
+ java_objectarray_t *a = (java_objectarray_t *) o; \
+ arraydescriptor *desc = o->vftbl->arraydesc; \
int i; \
\
GC_ASSERT(desc); \
for (i = 0; i < a->header.size; i++) { \
\
refptr = &( a->data[i] ); \
- ref = (java_objectheader *) (a->data[i]); \
+ ref = (java_object_t *) (a->data[i]); \
\
code; \
} \
\
GC_ASSERT(c); \
\
- for (; c; c = c->super.cls) { \
+ for (; c; c = c->super) { \
for (i = 0; i < c->fieldscount; i++) { \
f = &(c->fields[i]); \
\
if (!IS_ADR_TYPE(f->type) || (f->flags & ACC_STATIC)) \
continue; \
\
- refptr = (java_objectheader **) ((s1 *) o + f->offset); \
+ refptr = (java_object_t **) ((s1 *) o + f->offset); \
ref = *( refptr ); \
\
code; \