[project @ 2004-08-13 13:04:50 by simonmar]
[ghc-hetmet.git] / ghc / rts / Sanity.c
index 33d1980..82d6add 100644 (file)
@@ -1,5 +1,4 @@
 /* -----------------------------------------------------------------------------
- * $Id: Sanity.c,v 1.31 2002/12/11 15:36:48 simonmar Exp $
  *
  * (c) The GHC Team, 1998-2001
  *
@@ -26,7 +25,6 @@
 #include "MBlock.h"
 #include "Storage.h"
 #include "Schedule.h"
-#include "StoragePriv.h"   // for END_OF_STATIC_LIST
 #include "Apply.h"
 
 /* -----------------------------------------------------------------------------
@@ -113,20 +111,21 @@ checkStackFrame( StgPtr c )
        dyn = r->liveness;
        
        p = (P_)(r->payload);
-       checkSmallBitmap(p,GET_LIVENESS(r->liveness),RET_DYN_SIZE);
-       p += RET_DYN_SIZE;
+       checkSmallBitmap(p,RET_DYN_LIVENESS(r->liveness),RET_DYN_BITMAP_SIZE);
+       p += RET_DYN_BITMAP_SIZE + RET_DYN_NONPTR_REGS_SIZE;
 
        // skip over the non-pointers
-       p += GET_NONPTRS(dyn);
+       p += RET_DYN_NONPTRS(dyn);
        
        // follow the ptr words
-       for (size = GET_PTRS(dyn); size > 0; size--) {
+       for (size = RET_DYN_PTRS(dyn); size > 0; size--) {
            checkClosureShallow((StgClosure *)*p);
            p++;
        }
        
-       return sizeofW(StgRetDyn) + RET_DYN_SIZE + 
-           GET_NONPTRS(dyn) + GET_PTRS(dyn);
+       return sizeofW(StgRetDyn) + RET_DYN_BITMAP_SIZE +
+           RET_DYN_NONPTR_REGS_SIZE +
+           RET_DYN_NONPTRS(dyn) + RET_DYN_PTRS(dyn);
     }
 
     case UPDATE_FRAME:
@@ -164,18 +163,18 @@ checkStackFrame( StgPtr c )
        ret_fun = (StgRetFun *)c;
        fun_info = get_fun_itbl(ret_fun->fun);
        size = ret_fun->size;
-       switch (fun_info->fun_type) {
+       switch (fun_info->f.fun_type) {
        case ARG_GEN:
            checkSmallBitmap((StgPtr)ret_fun->payload, 
-                            BITMAP_BITS(fun_info->bitmap), size);
+                            BITMAP_BITS(fun_info->f.bitmap), size);
            break;
        case ARG_GEN_BIG:
            checkLargeBitmap((StgPtr)ret_fun->payload,
-                            (StgLargeBitmap *)fun_info->bitmap, size);
+                            (StgLargeBitmap *)fun_info->f.bitmap, size);
            break;
        default:
            checkSmallBitmap((StgPtr)ret_fun->payload,
-                            BITMAP_BITS(stg_arg_bitmaps[fun_info->fun_type]),
+                            BITMAP_BITS(stg_arg_bitmaps[fun_info->f.fun_type]),
                             size);
            break;
        }
@@ -272,7 +271,6 @@ checkClosure( StgClosure* p )
     case BLACKHOLE:
     case CAF_BLACKHOLE:
     case FOREIGN:
-    case BCO:
     case STABLE_NAME:
     case MUT_VAR:
     case MUT_CONS:
@@ -290,6 +288,15 @@ checkClosure( StgClosure* p )
            return sizeW_fromITBL(info);
        }
 
+    case BCO: {
+       StgBCO *bco = (StgBCO *)p;
+       ASSERT(LOOKS_LIKE_CLOSURE_PTR(bco->instrs));
+       ASSERT(LOOKS_LIKE_CLOSURE_PTR(bco->literals));
+       ASSERT(LOOKS_LIKE_CLOSURE_PTR(bco->ptrs));
+       ASSERT(LOOKS_LIKE_CLOSURE_PTR(bco->itbls));
+       return bco_sizeW(bco);
+    }
+
     case IND_STATIC: /* (1, 0) closure */
       ASSERT(LOOKS_LIKE_CLOSURE_PTR(((StgIndStatic*)p)->indirectee));
       return sizeW_fromITBL(info);
@@ -346,14 +353,14 @@ checkClosure( StgClosure* p )
            fun_info = get_fun_itbl(pap->fun);
 
            p = (StgClosure *)pap->payload;
-           switch (fun_info->fun_type) {
+           switch (fun_info->f.fun_type) {
            case ARG_GEN:
                checkSmallBitmap( (StgPtr)pap->payload, 
-                                 BITMAP_BITS(fun_info->bitmap), pap->n_args );
+                                 BITMAP_BITS(fun_info->f.bitmap), pap->n_args );
                break;
            case ARG_GEN_BIG:
                checkLargeBitmap( (StgPtr)pap->payload, 
-                                 (StgLargeBitmap *)fun_info->bitmap, 
+                                 (StgLargeBitmap *)fun_info->f.bitmap, 
                                  pap->n_args );
                break;
            case ARG_BCO:
@@ -363,7 +370,7 @@ checkClosure( StgClosure* p )
                break;
            default:
                checkSmallBitmap( (StgPtr)pap->payload, 
-                                 BITMAP_BITS(stg_arg_bitmaps[fun_info->fun_type]),
+                                 BITMAP_BITS(stg_arg_bitmaps[fun_info->f.fun_type]),
                                  pap->n_args );
                break;
            }
@@ -601,6 +608,9 @@ checkTSO(StgTSO *tso)
     case BlockedOnRead:
     case BlockedOnWrite:
     case BlockedOnDelay:
+#if defined(mingw32_TARGET_OS)
+    case BlockedOnDoProc:
+#endif
       /* isOnBQ(blocked_queue) */
       break;
     case BlockedOnException: