X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FSanity.c;h=0e68a86ba78d8b7edefd8c61b8e895e29f8cd04a;hb=e6218fe7eff4e34e1a3c823cd4b7aebe09d2d4fb;hp=d6b04a12df56e813d118619cf6ca4f4a4fad5284;hpb=3d07a88927642d6b74684a2f64c5514590e6691a;p=ghc-hetmet.git diff --git a/ghc/rts/Sanity.c b/ghc/rts/Sanity.c index d6b04a1..0e68a86 100644 --- a/ghc/rts/Sanity.c +++ b/ghc/rts/Sanity.c @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------------- * - * (c) The GHC Team, 1998-2001 + * (c) The GHC Team, 1998-2006 * * Sanity checking code for the heap and stack. * @@ -280,7 +280,7 @@ checkClosure( StgClosure* p ) for (i = 0; i < info->layout.payload.ptrs; i++) { ASSERT(LOOKS_LIKE_CLOSURE_PTR(((StgThunk *)p)->payload[i])); } - return stg_max(thunk_sizeW_fromITBL(info), sizeofW(StgHeader)+MIN_UPD_SIZE); + return thunk_sizeW_fromITBL(info); } case FUN: @@ -305,7 +305,8 @@ checkClosure( StgClosure* p ) case BLACKHOLE: case CAF_BLACKHOLE: case STABLE_NAME: - case MUT_VAR: + case MUT_VAR_CLEAN: + case MUT_VAR_DIRTY: case CONSTR_INTLIKE: case CONSTR_CHARLIKE: case CONSTR_STATIC: @@ -358,7 +359,7 @@ checkClosure( StgClosure* p ) */ StgInd *ind = (StgInd *)p; ASSERT(LOOKS_LIKE_CLOSURE_PTR(ind->indirectee)); - return sizeofW(StgHeader) + MIN_UPD_SIZE; + return sizeofW(StgInd); } case RET_BCO: @@ -400,7 +401,8 @@ checkClosure( StgClosure* p ) case ARR_WORDS: return arr_words_sizeW((StgArrWords *)p); - case MUT_ARR_PTRS: + case MUT_ARR_PTRS_CLEAN: + case MUT_ARR_PTRS_DIRTY: case MUT_ARR_PTRS_FROZEN: case MUT_ARR_PTRS_FROZEN0: { @@ -547,12 +549,18 @@ checkHeap(bdescr *bd) { StgPtr p; +#if defined(THREADED_RTS) + // heap sanity checking doesn't work with SMP, because we can't + // zero the slop (see Updates.h). + return; +#endif + for (; bd != NULL; bd = bd->link) { p = bd->start; while (p < bd->free) { nat size = checkClosure((StgClosure *)p); /* This is the smallest size of closure that can live in the heap */ - ASSERT( size >= MIN_NONUPD_SIZE + sizeofW(StgHeader) ); + ASSERT( size >= MIN_PAYLOAD_SIZE + sizeofW(StgHeader) ); p += size; /* skip over slop */ @@ -582,11 +590,11 @@ checkHeapChunk(StgPtr start, StgPtr end) size = sizeofW(StgFetchMe); } else if (get_itbl((StgClosure*)p)->type == IND) { *(p+2) = 0x0000ee11; /* mark slop in IND as garbage */ - size = MIN_UPD_SIZE; + size = sizeofW(StgInd); } else { size = checkClosure((StgClosure *)p); /* This is the smallest size of closure that can live in the heap. */ - ASSERT( size >= MIN_NONUPD_SIZE + sizeofW(StgHeader) ); + ASSERT( size >= MIN_PAYLOAD_SIZE + sizeofW(StgHeader) ); } } } @@ -601,7 +609,7 @@ checkHeapChunk(StgPtr start, StgPtr end) ASSERT(LOOKS_LIKE_INFO_PTR((void*)*p)); size = checkClosure((StgClosure *)p); /* This is the smallest size of closure that can live in the heap. */ - ASSERT( size >= MIN_NONUPD_SIZE + sizeofW(StgHeader) ); + ASSERT( size >= MIN_PAYLOAD_SIZE + sizeofW(StgHeader) ); } } #endif @@ -937,15 +945,4 @@ checkLAGAtable(rtsBool check_closures) } #endif -int -onMutList(StgMutClosure *p, StgMutClosure *mut) -{ - int i; - for (i=0; mut != END_MUT_LIST; i++) { - if (mut == p) return i; - mut = mut->mut_link; - } - return -1; -} - #endif /* DEBUG */