[project @ 2006-01-09 14:32:31 by simonmar]
[ghc-hetmet.git] / ghc / rts / RetainerProfile.c
index cbaf157..074c256 100644 (file)
@@ -510,7 +510,6 @@ push( StgClosure *c, retainer c_child_r, StgClosure **first_child )
 
        // layout.payload.ptrs, no SRT
     case CONSTR:
-    case FOREIGN:
     case STABLE_NAME:
     case BCO:
     case CONSTR_STATIC:
@@ -524,6 +523,7 @@ push( StgClosure *c, retainer c_child_r, StgClosure **first_child )
        // StgMutArrPtr.ptrs, no SRT
     case MUT_ARR_PTRS:
     case MUT_ARR_PTRS_FROZEN:
+    case MUT_ARR_PTRS_FROZEN0:
        init_ptrs(&se.info, ((StgMutArrPtrs *)c)->ptrs,
                  (StgPtr)(((StgMutArrPtrs *)c)->payload));
        *first_child = find_ptrs(&se.info);
@@ -816,13 +816,13 @@ pop( StgClosure **c, StgClosure **cp, retainer *r )
            return;
 
        case CONSTR:
-       case FOREIGN:
        case STABLE_NAME:
        case BCO:
        case CONSTR_STATIC:
            // StgMutArrPtr.ptrs, no SRT
        case MUT_ARR_PTRS:
        case MUT_ARR_PTRS_FROZEN:
+       case MUT_ARR_PTRS_FROZEN0:
            *c = find_ptrs(&se->info);
            if (*c == NULL) {
                popOff();
@@ -992,6 +992,7 @@ isRetainer( StgClosure *c )
     case MUT_VAR:
     case MUT_ARR_PTRS:
     case MUT_ARR_PTRS_FROZEN:
+    case MUT_ARR_PTRS_FROZEN0:
 
        // thunks are retainers.
     case THUNK:
@@ -1045,7 +1046,6 @@ isRetainer( StgClosure *c )
     case CONSTR_STATIC:
     case FUN_STATIC:
        // misc
-    case FOREIGN:
     case STABLE_NAME:
     case BCO:
     case ARR_WORDS:
@@ -1780,8 +1780,8 @@ computeRetainerSet( void )
        for (bd = generations[g].mut_list; bd != NULL; bd = bd->link) {
            for (ml = bd->start; ml < bd->free; ml++) {
 
-               maybeInitRetainerSet((StgClosure *)ml);
-               rtl = retainerSetOf((StgClosure *)ml);
+               maybeInitRetainerSet((StgClosure *)*ml);
+               rtl = retainerSetOf((StgClosure *)*ml);
 
 #ifdef DEBUG_RETAINER
                if (rtl == NULL) {
@@ -1851,19 +1851,19 @@ resetStaticObjectForRetainerProfiling( void )
            // Since we do not compute the retainer set of any
            // IND_STATIC object, we don't have to reset its retainer
            // field.
-           p = (StgClosure*)IND_STATIC_LINK(p);
+           p = (StgClosure*)*IND_STATIC_LINK(p);
            break;
        case THUNK_STATIC:
            maybeInitRetainerSet(p);
-           p = (StgClosure*)THUNK_STATIC_LINK(p);
+           p = (StgClosure*)*THUNK_STATIC_LINK(p);
            break;
        case FUN_STATIC:
            maybeInitRetainerSet(p);
-           p = (StgClosure*)FUN_STATIC_LINK(p);
+           p = (StgClosure*)*FUN_STATIC_LINK(p);
            break;
        case CONSTR_STATIC:
            maybeInitRetainerSet(p);
-           p = (StgClosure*)STATIC_LINK(get_itbl(p), p);
+           p = (StgClosure*)*STATIC_LINK(get_itbl(p), p);
            break;
        default:
            barf("resetStaticObjectForRetainerProfiling: %p (%s)",
@@ -2027,7 +2027,7 @@ retainerProfile(void)
 #ifdef DEBUG_RETAINER
 
 #define LOOKS_LIKE_PTR(r) ((LOOKS_LIKE_STATIC_CLOSURE(r) || \
-        ((HEAP_ALLOCED(r) && Bdescr((P_)r)->free != (void *)-1))) && \
+        ((HEAP_ALLOCED(r) && ((Bdescr((P_)r)->flags & BF_FREE) == 0)))) && \
         ((StgWord)(*(StgPtr)r)!=0xaaaaaaaa))
 
 static nat
@@ -2074,6 +2074,7 @@ sanityCheckHeapClosure( StgClosure *c )
 
     case MUT_ARR_PTRS:
     case MUT_ARR_PTRS_FROZEN:
+    case MUT_ARR_PTRS_FROZEN0:
        return mut_arr_ptrs_sizeW((StgMutArrPtrs *)c);
 
     case AP:
@@ -2107,7 +2108,6 @@ sanityCheckHeapClosure( StgClosure *c )
     case IND_PERM:
     case IND_OLDGEN:
     case IND_OLDGEN_PERM:
-    case FOREIGN:
     case BCO:
     case STABLE_NAME:
        return sizeW_fromITBL(info);