projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add another SMP assertion
[ghc-hetmet.git]
/
ghc
/
rts
/
Sanity.c
diff --git
a/ghc/rts/Sanity.c
b/ghc/rts/Sanity.c
index
ae40bbe
..
0e68a86
100644
(file)
--- 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.
*
*
* 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]));
}
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:
}
case FUN:
@@
-305,7
+305,8
@@
checkClosure( StgClosure* p )
case BLACKHOLE:
case CAF_BLACKHOLE:
case STABLE_NAME:
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:
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));
*/
StgInd *ind = (StgInd *)p;
ASSERT(LOOKS_LIKE_CLOSURE_PTR(ind->indirectee));
- return sizeofW(StgHeader) + MIN_UPD_SIZE;
+ return sizeofW(StgInd);
}
case RET_BCO:
}
case RET_BCO:
@@
-400,7
+401,8
@@
checkClosure( StgClosure* p )
case ARR_WORDS:
return arr_words_sizeW((StgArrWords *)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:
{
case MUT_ARR_PTRS_FROZEN:
case MUT_ARR_PTRS_FROZEN0:
{
@@
-547,12
+549,18
@@
checkHeap(bdescr *bd)
{
StgPtr p;
{
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 */
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 */
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 = 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. */
} 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(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
}
}
#endif