case CONSTR_NOCAF_STATIC:
{
StgWord i, j;
+ StgConInfoTable *con_info = get_con_itbl (obj);
-#ifdef PROFILING
- debugBelch("%s(", GET_PROF_DESC(info));
- debugBelch("%s", obj->header.prof.ccs->cc->label);
-#else
- debugBelch("CONSTR(");
- printPtr((StgPtr)obj->header.info);
- debugBelch("(tag=%d)",info->srt_bitmap);
-#endif
+ debugBelch("%s(", GET_CON_DESC(con_info));
for (i = 0; i < info->layout.payload.ptrs; ++i) {
- debugBelch(", ");
+ if (i != 0) debugBelch(", ");
printPtr((StgPtr)obj->payload[i]);
}
for (j = 0; j < info->layout.payload.nptrs; ++j) {
- debugBelch(", %p#", obj->payload[i+j]);
+ if (i != 0 || j != 0) debugBelch(", ");
+ debugBelch("%p#", obj->payload[i+j]);
}
debugBelch(")\n");
break;
debugBelch(")\n");
break;
- case IND_OLDGEN:
- debugBelch("IND_OLDGEN(");
- printPtr((StgPtr)((StgInd*)obj)->indirectee);
- debugBelch(")\n");
- break;
-
case IND_PERM:
debugBelch("IND(");
printPtr((StgPtr)((StgInd*)obj)->indirectee);
debugBelch(")\n");
break;
- case IND_OLDGEN_PERM:
- debugBelch("IND_OLDGEN_PERM(");
- printPtr((StgPtr)((StgInd*)obj)->indirectee);
- debugBelch(")\n");
- break;
-
case IND_STATIC:
debugBelch("IND_STATIC(");
printPtr((StgPtr)((StgInd*)obj)->indirectee);
break;
}
+ case UNDERFLOW_FRAME:
+ {
+ StgUnderflowFrame* u = (StgUnderflowFrame*)obj;
+ debugBelch("UNDERFLOW_FRAME(");
+ printPtr((StgPtr)u->next_chunk);
+ debugBelch(")\n");
+ break;
+ }
+
case STOP_FRAME:
{
StgStopFrame* u = (StgStopFrame*)obj;
{
StgWord i;
debugBelch("ARR_WORDS(\"");
- /* ToDo: we can't safely assume that this is a string!
- for (i = 0; arrWordsGetChar(obj,i); ++i) {
- putchar(arrWordsGetChar(obj,i));
- } */
- for (i=0; i<((StgArrWords *)obj)->words; i++)
+ for (i=0; i<arr_words_words((StgArrWords *)obj); i++)
debugBelch("%lu", (lnat)((StgArrWords *)obj)->payload[i]);
debugBelch("\")\n");
break;
case UPDATE_FRAME:
case CATCH_FRAME:
- printObj((StgClosure*)sp);
+ case UNDERFLOW_FRAME:
+ case STOP_FRAME:
+ printObj((StgClosure*)sp);
continue;
- case STOP_FRAME:
- printObj((StgClosure*)sp);
- return;
-
case RET_DYN:
{
StgRetDyn* r;
void printTSO( StgTSO *tso )
{
- printStackChunk( tso->sp, tso->stack+tso->stack_size);
+ printStackChunk( tso->stackobj->sp,
+ tso->stackobj->stack+tso->stackobj->stack_size);
}
/* --------------------------------------------------------------------------
static int
findPtrBlocks (StgPtr p, bdescr *bd, StgPtr arr[], int arr_size, int i)
{
- StgPtr q, r;
+ StgPtr q, r, end;
for (; bd; bd = bd->link) {
searched++;
for (q = bd->start; q < bd->free; q++) {
if (UNTAG_CLOSURE((StgClosure*)*q) == (StgClosure *)p) {
if (i < arr_size) {
- r = q;
- while (HEAP_ALLOCED((StgPtr)*r) || !LOOKS_LIKE_INFO_PTR(*r) || (P_)*r == NULL) {
- r--;
+ for (r = bd->start; r < bd->free; r = end) {
+ // skip over zeroed-out slop
+ while (*r == 0) r++;
+ if (!LOOKS_LIKE_CLOSURE_PTR(r)) {
+ debugBelch("%p found at %p, no closure at %p\n",
+ p, q, r);
+ break;
+ }
+ end = r + closure_sizeW((StgClosure*)r);
+ if (q < end) {
+ debugBelch("%p = ", r);
+ printClosure((StgClosure *)r);
+ arr[i++] = r;
+ break;
+ }
+ }
+ if (r >= bd->free) {
+ debugBelch("%p found at %p, closure?", p, q);
}
- debugBelch("%p = ", r);
- printClosure((StgClosure *)r);
- arr[i++] = r;
} else {
return i;
}
{
nat g;
bdescr *bd;
-#if defined(__GNUC__)
const int arr_size = 1024;
-#else
-#define arr_size 1024
-#endif
StgPtr arr[arr_size];
int i = 0;
searched = 0;
while (type == IND ||
type == IND_STATIC ||
- type == IND_OLDGEN ||
- type == IND_PERM ||
- type == IND_OLDGEN_PERM)
+ type == IND_PERM)
{
obj = ((StgInd *)obj)->indirectee;
type = get_itbl(obj)->type;
[ThreadRunGHC] = "ThreadRunGHC",
[ThreadInterpret] = "ThreadInterpret",
[ThreadKilled] = "ThreadKilled",
- [ThreadRelocated] = "ThreadRelocated",
[ThreadComplete] = "ThreadComplete"
};
[PAP] = "PAP",
[AP_STACK] = "AP_STACK",
[IND] = "IND",
- [IND_OLDGEN] = "IND_OLDGEN",
[IND_PERM] = "IND_PERM",
- [IND_OLDGEN_PERM] = "IND_OLDGEN_PERM",
[IND_STATIC] = "IND_STATIC",
[RET_BCO] = "RET_BCO",
[RET_SMALL] = "RET_SMALL",
[RET_FUN] = "RET_FUN",
[UPDATE_FRAME] = "UPDATE_FRAME",
[CATCH_FRAME] = "CATCH_FRAME",
+ [UNDERFLOW_FRAME] = "UNDERFLOW_FRAME",
[STOP_FRAME] = "STOP_FRAME",
[BLACKHOLE] = "BLACKHOLE",
[BLOCKING_QUEUE] = "BLOCKING_QUEUE",
[PRIM] = "PRIM",
[MUT_PRIM] = "MUT_PRIM",
[TSO] = "TSO",
+ [STACK] = "STACK",
[TREC_CHUNK] = "TREC_CHUNK",
[ATOMICALLY_FRAME] = "ATOMICALLY_FRAME",
[CATCH_RETRY_FRAME] = "CATCH_RETRY_FRAME",