X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fmm%2Fcacao-gc%2Fcompact.c;h=5e384d3978a53a5ab79d9cdb588a6074eff1fbff;hb=0a36d852c308aac7be41dbf9445907d7793e9be9;hp=e5c1420e63acd732264e4a1a8b7e7654695f879b;hpb=808f98b7956bf14534e823398fbf6a4bcf5430c4;p=cacao.git diff --git a/src/mm/cacao-gc/compact.c b/src/mm/cacao-gc/compact.c index e5c1420e6..5e384d397 100644 --- a/src/mm/cacao-gc/compact.c +++ b/src/mm/cacao-gc/compact.c @@ -22,8 +22,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id$ - */ @@ -48,7 +46,7 @@ #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); \ } @@ -66,8 +64,8 @@ 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"); ); @@ -79,7 +77,7 @@ static void compact_thread_rootset(rootset_t *rs, void *start, void *end) for (i = 0; i < rs->refcount; i++) { /* load the reference */ - refptr = rs->refs[i]; + refptr = rs->refs[i].ref; ref = *( refptr ); GC_LOG2( printf("\troot pointer to %p\n", (void *) ref); ); @@ -96,94 +94,6 @@ static void compact_thread_rootset(rootset_t *rs, void *start, void *end) } -/* compact_thread_classes ****************************************************** - - Threads all the references from classinfo structures (static fields) - - IN: - start.....Region to be compacted start here - end.......Region to be compacted ends here - -*******************************************************************************/ - -static void compact_thread_classes(void *start, void *end) -{ - java_objectheader *ref; - java_objectheader **refptr; - classinfo *c; - fieldinfo *f; - /*hashtable_classloader_entry *cle;*/ - void *sys_start, *sys_end; - int i; - - GC_LOG2( printf("threading in classes\n"); ); - - /* TODO: cleanup!!! */ - sys_start = heap_region_sys->base; - sys_end = heap_region_sys->ptr; - -#if 0 - /* walk through all classloaders */ - for (i = 0; i < hashtable_classloader->size; i++) { - cle = hashtable_classloader->ptr[i]; - - while (cle) { - - /* thread the classloader */ - refptr = &( cle->object ); - ref = *( refptr ); - GC_LOG2( printf("\tclassloader from hashtable at %p\n", (void *) ref); ); - GC_THREAD(ref, refptr, start, end); - - cle = cle->hashlink; - } - } -#endif - - /* walk through all classinfo blocks */ - for (c = sys_start; c < (classinfo *) sys_end; c++) { - - /* thread the classloader */ - /*refptr = &( c->classloader ); - ref = *( refptr ); - GC_LOG2( printf("\tclassloader from classinfo at %p\n", (void *) ref); ); - GC_THREAD(ref, refptr, start, end);*/ - - /* walk through all fields */ - f = c->fields; - for (i = 0; i < c->fieldscount; i++, f++) { - - /* check if this is a static reference */ - if (!IS_ADR_TYPE(f->type) || !(f->flags & ACC_STATIC)) - continue; - - /* load the reference */ - refptr = (java_objectheader **) &(f->value); - ref = *( refptr ); - - GC_LOG2( printf("\tclass-field points to %p\n", (void *) ref); ); - /*GC_LOG2( - printf("\tfield: "); field_print(f); printf("\n"); - printf("\tclass-field points to "); - if (ref == NULL) { - printf("(NULL)\n"); - } else if (GC_IS_THREADED(ref->vftbl)) { - printf("(threaded)\n"); - } else { - heap_print_object(ref); printf("\n"); - } - );*/ - - /* thread the reference */ - GC_THREAD(ref, refptr, start, end); - - } - - } - -} - - /* compact_thread_references *************************************************** Threads all the references of an object. @@ -195,10 +105,10 @@ static void compact_thread_classes(void *start, void *end) *******************************************************************************/ -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"); ); @@ -242,9 +152,9 @@ static void compact_thread_references(java_objectheader *o, void *start, void *e *******************************************************************************/ -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"); ); @@ -254,20 +164,20 @@ static void compact_unthread_references(java_objectheader *o, void *new) 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; } @@ -330,13 +240,13 @@ static u4 compact_move(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)) { /* 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; @@ -367,7 +277,7 @@ void compact_me(rootset_t *rs, regioninfo_t *region) { u1 *ptr; u1 *ptr_new; - java_objectheader *o; + java_object_t *o; u4 o_size; u4 o_size_new; u4 used; @@ -375,9 +285,7 @@ void compact_me(rootset_t *rs, regioninfo_t *region) GC_LOG( dolog("GC: Compaction Phase 0 started ..."); ); /* Phase 0: - * - thread all references in classes * - thread all references in the rootset */ - /*compact_thread_classes(region->base, region->ptr);*/ compact_thread_rootset(rs, region->base, region->ptr); GC_LOG( dolog("GC: Compaction Phase 1 started ..."); ); @@ -388,7 +296,7 @@ void compact_me(rootset_t *rs, regioninfo_t *region) * - 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)); @@ -436,7 +344,7 @@ void compact_me(rootset_t *rs, regioninfo_t *region) 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)) {