dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
dnl 02110-1301, USA.
dnl
-dnl $Id: configure.ac 8274 2007-08-08 15:58:17Z twisti $
+dnl $Id: configure.ac 8299 2007-08-13 08:41:18Z michi $
dnl Process this file with autoconf to produce a configure script.
#define GC_THREAD(ref, refptr, start, end) \
if (POINTS_INTO(ref, start, end)) { \
GC_ASSERT(GC_IS_MARKED(ref)); \
- *refptr = (java_objectheader *) ref->vftbl; \
+ *refptr = (java_object_t *) ref->vftbl; \
ref->vftbl = (struct _vftbl *) GC_SET_THREAD_BIT(refptr); \
}
static void compact_thread_rootset(rootset_t *rs, void *start, void *end)
{
- java_objectheader *ref;
- java_objectheader **refptr;
+ java_object_t *ref;
+ java_object_t **refptr;
int i;
GC_LOG2( printf("threading in rootsets\n"); );
static void compact_thread_classes(void *start, void *end)
{
- java_objectheader *ref;
- java_objectheader **refptr;
- classinfo *c;
- fieldinfo *f;
+ java_object_t *ref;
+ java_object_t **refptr;
+ classinfo *c;
+ fieldinfo *f;
/*hashtable_classloader_entry *cle;*/
void *sys_start, *sys_end;
int i;
continue;
/* load the reference */
- refptr = (java_objectheader **) &(f->value);
+ refptr = (java_object_t **) &(f->value);
ref = *( refptr );
GC_LOG2( printf("\tclass-field points to %p\n", (void *) ref); );
*******************************************************************************/
-static void compact_thread_references(java_objectheader *o, void *start, void *end)
+static void compact_thread_references(java_object_t *o, void *start, void *end)
{
- java_objectheader *ref;
- java_objectheader **refptr;
+ java_object_t *ref;
+ java_object_t **refptr;
GC_LOG2( printf("threading in ");
heap_print_object(o); printf("\n"); );
*******************************************************************************/
-static void compact_unthread_references(java_objectheader *o, void *new)
+static void compact_unthread_references(java_object_t *o, void *new)
{
- java_objectheader **refptr;
+ java_object_t **refptr;
ptrint tmp;
GC_LOG2( printf("unthreading in ...\n"); );
GC_ASSERT(GC_IS_THREADED(o->vftbl));
/* walk down the threaded chain */
- refptr = (java_objectheader **) (ptrint) o->vftbl;
+ refptr = (java_object_t **) (ptrint) o->vftbl;
while (GC_IS_THREADED(refptr)) {
/* remove the threading bit */
- refptr = (java_objectheader **) GC_REMOVE_THREAD_BIT(refptr);
+ refptr = (java_object_t **) GC_REMOVE_THREAD_BIT(refptr);
GC_LOG2( printf("\treference at %p\n", (void *) refptr); );
/* update the reference in the chain */
tmp = (ptrint) *refptr;
- *refptr = (java_objectheader *) (ptrint) new;
+ *refptr = (java_object_t *) (ptrint) new;
/* skip to the next chain value */
- refptr = (java_objectheader **) tmp;
+ refptr = (java_object_t **) tmp;
}
new_size = size;
/* check if we need to attach the hashcode to the object */
- if (GC_TEST_FLAGS((java_objectheader *) new, HDRFLAG_HASH_TAKEN)) {
+ if (GC_TEST_FLAGS((java_object_t *) new, HDRFLAG_HASH_TAKEN)) {
/* TODO: move this whole bunch to heap_attach_hashcode() */
/* change the flags accordingly */
- GC_CLEAR_FLAGS((java_objectheader *) new, HDRFLAG_HASH_TAKEN);
- GC_SET_FLAGS((java_objectheader *) new, HDRFLAG_HASH_ATTACHED);
+ GC_CLEAR_FLAGS((java_object_t *) new, HDRFLAG_HASH_TAKEN);
+ GC_SET_FLAGS((java_object_t *) new, HDRFLAG_HASH_ATTACHED);
/* attach the hashcode at the end of the object */
new_size += SIZEOF_VOID_P;
{
u1 *ptr;
u1 *ptr_new;
- java_objectheader *o;
+ java_object_t *o;
u4 o_size;
u4 o_size_new;
u4 used;
* - update forward references */
ptr = region->base; ptr_new = region->base;
while (ptr < region->ptr) {
- o = (java_objectheader *) ptr;
+ o = (java_object_t *) ptr;
/* uncollectable items should never be compacted */
GC_ASSERT(!GC_TEST_FLAGS(o, HDRFLAG_UNCOLLECTABLE));
used = 0;
ptr = region->base; ptr_new = region->base;
while (ptr < region->ptr) {
- o = (java_objectheader *) ptr;
+ o = (java_object_t *) ptr;
/* if this object is still part of a threaded chain ... */
if (GC_IS_THREADED(o->vftbl)) {
/* Global Variables ***********************************************************/
-static java_objectheader *next;
+static java_object_t *next;
static u4 copy_object(u1 *old, u1 *new, u4 size)
new_size = size;
/* check if we need to attach the hashcode to the object */
- if (GC_TEST_FLAGS((java_objectheader *) new, HDRFLAG_HASH_TAKEN)) {
+ if (GC_TEST_FLAGS((java_object_t *) new, HDRFLAG_HASH_TAKEN)) {
GC_LOG( printf("need to attach hash to %p\n", new); );
#define GC_FORWARD(ref,refptr,start,end) \
*(refptr) = copy_forward(ref, start, end)
-static void *copy_forward(java_objectheader *o, void *src_start, void *src_end)
+static void *copy_forward(java_object_t *o, void *src_start, void *src_end)
{
s4 o_size;
if (GC_IS_MARKED(o)) {
GC_LOG2( printf("\tForwarding reference: %p -> ", (void *) o);
- heap_print_object((java_objectheader *) o->vftbl);
+ heap_print_object((java_object_t *) o->vftbl);
printf("\n"); );
/* return the location of an already existing copy */
void copy_me(regioninfo_t *src, regioninfo_t *dst, rootset_t *rs)
{
- java_objectheader *scan;
- /*java_objectheader *next;*/
- java_objectheader *ref;
- java_objectheader **refptr;
+ java_object_t *scan;
+ /*java_object_t *next;*/
+ java_object_t *ref;
+ java_object_t **refptr;
int i;
/* initialize the scan and next pointer */
- scan = (java_objectheader *) dst->base;
- next = (java_objectheader *) dst->base;
+ scan = (java_object_t *) dst->base;
+ next = (java_object_t *) dst->base;
GC_LOG( dolog("GC: Copying object from rootset ..."); );
final_list = list_create(OFFSET(list_final_entry_t, linkage));
}
-void final_register(java_objectheader *o, methodinfo *finalizer)
+void final_register(java_object_t *o, methodinfo *finalizer)
{
list_final_entry_t *fe;
struct list_final_entry_t {
listnode_t linkage;
u4 type;
- java_objectheader *o;
+ java_object_t *o;
methodinfo *finalizer;
};
/* Prototypes *****************************************************************/
void final_init();
-void final_register(java_objectheader *o, methodinfo *finalizer);
+void final_register(java_object_t *o, methodinfo *finalizer);
void final_invoke();
void final_set_all_reclaimable();
list_t *gc_reflist;
#if defined(ENABLE_THREADS)
-java_objectheader *gc_global_lock;
+java_object_t *gc_global_lock;
#endif
#if !defined(ENABLE_THREADS)
#if defined(ENABLE_THREADS)
/* create global gc lock object */
- gc_global_lock = NEW(java_objectheader);
+ gc_global_lock = NEW(java_object_t);
lock_init_object_lock(gc_global_lock);
#endif
*******************************************************************************/
-void gc_reference_register(java_objectheader **ref)
+void gc_reference_register(java_object_t **ref)
{
list_gcref_entry_t *re;
}
-void gc_reference_unregister(java_objectheader **ref)
+void gc_reference_unregister(java_object_t **ref)
{
vm_abort("gc_reference_unregister: IMPLEMENT ME!");
}
typedef struct list_gcref_entry_t list_gcref_entry_t;
struct list_gcref_entry_t {
- listnode_t linkage;
- java_objectheader **ref;
+ listnode_t linkage;
+ java_object_t **ref;
};
regioninfo_t *heap_region_main;
-void heap_init_objectheader(java_objectheader *o, u4 bytelength)
+void heap_init_objectheader(java_object_t *o, u4 bytelength)
{
u4 wordcount;
void heap_update_references(rootset_t *rs, regioninfo_t *region, u4 offset)
{
- java_objectheader *o;
- java_objectheader *ref;
- java_objectheader **refptr;
+ java_object_t *o;
+ java_object_t *ref;
+ java_object_t **refptr;
u1* start;
u1* end;
int i;
}
-s4 heap_get_hashcode(java_objectheader *o)
+s4 heap_get_hashcode(java_object_t *o)
{
s4 hashcode;
}
-static java_objectheader *heap_alloc_intern(u4 bytelength, regioninfo_t *region, bool collect)
+static java_object_t *heap_alloc_intern(u4 bytelength, regioninfo_t *region, bool collect)
{
- java_objectheader *p;
+ java_object_t *p;
/* only a quick sanity check */
GC_ASSERT(region);
- GC_ASSERT(bytelength >= sizeof(java_objectheader));
+ GC_ASSERT(bytelength >= sizeof(java_object_t));
/* align objects in memory */
bytelength = GC_ALIGN(bytelength, GC_ALIGN_SIZE);
}
/* allocate the object in this region */
- p = (java_objectheader *) region->ptr;
+ p = (java_object_t *) region->ptr;
region->ptr += bytelength;
region->free -= bytelength;
void *heap_alloc(u4 size, u4 references, methodinfo *finalizer, bool collect)
{
- java_objectheader *p;
+ java_object_t *p;
#if defined(ENABLE_RT_TIMING)
struct timespec time_start, time_end;
#endif
void *heap_alloc_uncollectable(u4 size)
{
- java_objectheader *p;
+ java_object_t *p;
/* loader.c does this a lot for classes with fieldscount equal zero */
if (size == 0)
#if !defined(NDEBUG)
-void heap_print_object_flags(java_objectheader *o)
+void heap_print_object_flags(java_object_t *o)
{
printf("0x%02x [%s%s%s%s]",
GC_GET_SIZE(o),
#if !defined(NDEBUG)
-void heap_print_object(java_objectheader *o)
+void heap_print_object(java_object_t *o)
{
java_arrayheader *a;
classinfo *c;
#if !defined(NDEBUG)
void heap_dump_region(regioninfo_t *region, bool marked_only)
{
- java_objectheader *o;
- u4 o_size;
+ java_object_t *o;
+ u4 o_size;
/* some basic sanity checks */
GC_ASSERT(region->base <= region->ptr);
printf("Heap-Dump:\n");
/* walk the region in a linear style */
- o = (java_objectheader *) region->base;
+ o = (java_object_t *) region->base;
while (o < region->ptr) {
if (!marked_only || GC_IS_MARKED(o)) {
#endif
-s4 get_object_size(java_objectheader *o)
+s4 get_object_size(java_object_t *o)
{
java_arrayheader *a;
classinfo *c;
#include "gc.h"
#include "region.h"
-#include "vmcore/primitive.h" /* needed for ARRAYTYPE_OBJECT */
+#include "vm/primitive.h" /* needed for ARRAYTYPE_OBJECT */
#define GC_SIZE_DUMMY 0xff
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_println_usage();
-void heap_print_object(java_objectheader *o);
+void heap_print_object(java_object_t *o);
void heap_dump_region(regioninfo_t *region, bool marked_only);
#endif
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; \
} \
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; \
*******************************************************************************/
-void mark_recursive(java_objectheader *o)
+void mark_recursive(java_object_t *o)
{
- vftbl_t *t;
- classinfo *c;
- fieldinfo *f;
- java_objectarray *oa;
- arraydescriptor *desc;
- java_objectheader *ref;
+ vftbl_t *t;
+ classinfo *c;
+ fieldinfo *f;
+ java_objectarray *oa;
+ arraydescriptor *desc;
+ java_object_t *ref;
void *start, *end;
int i;
for (i = 0; i < oa->header.size; i++) {
/* load the reference value */
- ref = (java_objectheader *) (oa->data[i]);
+ ref = (java_object_t *) (oa->data[i]);
/* check for outside or null pointers */
if (!POINTS_INTO(ref, start, end))
continue;
/* load the reference value */
- ref = *( (java_objectheader **) ((s1 *) o + f->offset) );
+ ref = *( (java_object_t **) ((s1 *) o + f->offset) );
/* check for outside or null pointers */
if (!POINTS_INTO(ref, start, end))
void mark_classes(void *start, void *end)
{
- java_objectheader *ref;
- classinfo *c;
- fieldinfo *f;
+ java_object_t *ref;
+ classinfo *c;
+ fieldinfo *f;
void *sys_start, *sys_end;
int i;
continue;
/* load the reference */
- ref = (java_objectheader *) (f->value.a);
+ ref = (java_object_t *) (f->value);
/* check for outside or null pointers */
if (!POINTS_INTO(ref, start, end))
void mark_me(rootset_t *rs)
{
- java_objectheader *ref;
+ java_object_t *ref;
#if defined(GCCONF_FINALIZER)
- list_final_entry_t *fe;
+ list_final_entry_t *fe;
#endif
- u4 f_type;
+ u4 f_type;
void *start, *end;
int i;
#if defined(ENABLE_THREADS)
/* initiate the header for locking */
- lock_init_object_lock((java_objectheader *) region);
+ lock_init_object_lock((java_object_t *) region);
#endif
#if defined(ENABLE_MEMCHECK)
struct regioninfo_t {
#if defined(ENABLE_THREADS)
- java_objectheader header; /* needed for locking */
+ java_object_t header; /* needed for locking */
#endif
u1 *base; /* pointer to the start of this region */
u1 *end; /* pointer to the end of this region */
continue;
/* check for outside or null pointers */
- if (f->value.a == NULL)
+ if (f->value->a == NULL)
continue;
- GC_LOG2( printf("Found Static Field Reference: %p\n", (void *) f->value.a);
+ GC_LOG2( printf("Found Static Field Reference: %p\n", (void *) f->value->a);
printf("\tfrom field: "); field_print(f); printf("\n");
- printf("\tto object : "); heap_print_object(f->value.a); printf("\n"); );
+ printf("\tto object : "); heap_print_object(f->value->a); printf("\n"); );
/* add this static field reference to the root set */
- ROOTSET_ADD(&( f->value.a ), true, REFTYPE_CLASSREF);
+ ROOTSET_ADD(f->value, true, REFTYPE_CLASSREF);
}
GC_LOG2( printf("Found Reference (Java Local): %p\n", (void *) sf->javalocals[i].a); );
/* add this reference to the root set */
- ROOTSET_ADD((java_objectheader **) &( sf->javalocals[i] ), true, REFTYPE_STACK);
+ ROOTSET_ADD((java_object_t **) &( sf->javalocals[i] ), true, REFTYPE_STACK);
}
GC_LOG2( printf("Found Reference (Java Stack): %p\n", (void *) sf->javastack[i].a); );
/* add this reference to the root set */
- ROOTSET_ADD((java_objectheader **) &( sf->javastack[i] ), true, REFTYPE_STACK);
+ ROOTSET_ADD((java_object_t **) &( sf->javastack[i] ), true, REFTYPE_STACK);
}
GC_LOG( printf("Found Reference (Sync Slot): %p\n", (void *) sf->syncslots[i].a); );
/* add this reference to the root set */
- ROOTSET_ADD((java_objectheader **) &( sf->syncslots[i] ), true, REFTYPE_STACK);
+ ROOTSET_ADD((java_object_t **) &( sf->syncslots[i] ), true, REFTYPE_STACK);
}
}
void rootset_print(rootset_t *rs)
{
- java_objectheader *o;
+ java_object_t *o;
int i;
/* walk through all rootsets in the chain */
the reference */
typedef struct rootset_entry_t {
- java_objectheader **ref; /* a pointer to the actual reference */
+ java_object_t **ref; /* a pointer to the actual reference */
bool marks; /* indicates if a reference marks */
#if !defined(NDEBUG)
s4 type;
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: gc-common.h 7920 2007-05-20 23:02:43Z michi $
+ $Id: gc-common.h 8302 2007-08-13 13:50:50Z michi $
*/
void heap_free(void *p);
#if defined(ENABLE_GC_CACAO)
-void heap_init_objectheader(java_objectheader *o, u4 size);
-s4 heap_get_hashcode(java_objectheader *o);
+void heap_init_objectheader(java_object_t *o, u4 size);
+s4 heap_get_hashcode(java_object_t *o);
-void gc_reference_register(java_objectheader **ref);
-void gc_reference_unregister(java_objectheader **ref);
+void gc_reference_register(java_object_t **ref);
+void gc_reference_unregister(java_object_t **ref);
#endif
void gc_call(void);