SPARC NCG: Also do misaligned reads (this time for sure!)
[ghc-hetmet.git] / rts / sm / Compact.c
index fa6efa9..6758cfa 100644 (file)
@@ -84,7 +84,7 @@ thread (StgClosure **p)
     if (HEAP_ALLOCED(q)) {
        bd = Bdescr(q); 
 
-       if (bd->flags & BF_COMPACTED)
+       if (bd->flags & BF_MARKED)
         {
             iptr = *q;
             switch (GET_CLOSURE_TAG((StgClosure *)iptr))
@@ -621,8 +621,6 @@ thread_obj (StgInfoTable *info, StgPtr p)
     case MUT_VAR_CLEAN:
     case MUT_VAR_DIRTY:
     case CAF_BLACKHOLE:
-    case SE_CAF_BLACKHOLE:
-    case SE_BLACKHOLE:
     case BLACKHOLE:
     {
        StgPtr end;
@@ -978,19 +976,33 @@ compact(StgClosure *static_objects)
     for (g = 1; g < RtsFlags.GcFlags.generations; g++) {
        bdescr *bd;
        StgPtr p;
+        nat n;
        for (bd = generations[g].mut_list; bd != NULL; bd = bd->link) {
            for (p = bd->start; p < bd->free; p++) {
                thread((StgClosure **)p);
            }
        }
+        for (n = 0; n < n_capabilities; n++) {
+            for (bd = capabilities[n].mut_lists[g]; 
+                 bd != NULL; bd = bd->link) {
+                for (p = bd->start; p < bd->free; p++) {
+                    thread((StgClosure **)p);
+                }
+            }
+        }
     }
 
     // the global thread list
-    thread((void *)&all_threads);
+    for (s = 0; s < total_steps; s++) {
+        thread((void *)&all_steps[s].threads);
+    }
 
     // any threads resurrected during this GC
     thread((void *)&resurrected_threads);
 
+    // the blackhole queue
+    thread((void *)&blackhole_queue);
+
     // the task list
     {
        Task *task;