* src/mm/cacao-gc/compact.c (compact_thread_classes): Removed obsolete function.
[cacao.git] / src / mm / cacao-gc / compact.c
index 1ea4b37c91f71c76029e3ded38c8947639ef97a6..5e384d3978a53a5ab79d9cdb588a6074eff1fbff 100644 (file)
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Michael Starzinger
-
-   $Id$
-
 */
 
 
@@ -52,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); \
        }
 
 
 *******************************************************************************/
 
-void compact_thread_rootset(rootset_t *rs, void *start, void *end)
+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"); );
@@ -83,7 +77,7 @@ 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); );
@@ -100,94 +94,6 @@ 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 
-
-*******************************************************************************/
-
-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.
@@ -199,10 +105,10 @@ void compact_thread_classes(void *start, void *end)
 
 *******************************************************************************/
 
-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"); );
@@ -246,9 +152,9 @@ void compact_thread_references(java_objectheader *o, void *start, void *end)
 
 *******************************************************************************/
 
-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"); );
@@ -258,20 +164,20 @@ 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;
 
        }
 
@@ -302,7 +208,7 @@ void compact_unthread_references(java_objectheader *o, void *new)
 
 *******************************************************************************/
 
-u4 compact_move(u1 *old, u1 *new, u4 size)
+static u4 compact_move(u1 *old, u1 *new, u4 size)
 {
        s4 hashcode;
        u4 new_size;
@@ -316,7 +222,7 @@ u4 compact_move(u1 *old, u1 *new, u4 size)
                /* copy old object content to new location */
                MCOPY(new, old, u1, size);
 
-#if !defined(NDEBUG)
+#if defined(ENABLE_MEMCHECK)
                /* invalidate old object */
                MSET(old, MEMORY_CLEAR_BYTE, u1, size);
 #endif
@@ -334,13 +240,13 @@ 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;
@@ -371,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;
@@ -379,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 ..."); );
@@ -392,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));
@@ -411,6 +315,11 @@ void compact_me(rootset_t *rs, regioninfo_t *region)
                /* only marked objects survive */
                if (GC_IS_MARKED(o)) {
 
+#if defined(GCCONF_HDRFLAG_REFERENCING)
+                       /* check if this objects contains references */
+                       if (GC_TEST_FLAGS(o, HDRFLAG_REFERENCING))
+#endif
+
                        /* thread all the references in this object */
                        compact_thread_references(o, region->base, region->ptr);
 
@@ -435,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)) {