+
+ case MUT_VAR:
+ {
+ StgMutVar* mv = (StgMutVar*)obj;
+ debugBelch("MUT_VAR(var=%p, link=%p)\n", mv->var, mv->mut_link);
+ break;
+ }
+
+ case WEAK:
+ debugBelch("WEAK(");
+ debugBelch(" key=%p value=%p finalizer=%p",
+ (StgPtr)(((StgWeak*)obj)->key),
+ (StgPtr)(((StgWeak*)obj)->value),
+ (StgPtr)(((StgWeak*)obj)->finalizer));
+ debugBelch(")\n");
+ /* ToDo: chase 'link' ? */
+ break;
+
+ case FOREIGN:
+ debugBelch("FOREIGN(");
+ printPtr((StgPtr)( ((StgForeignObj*)obj)->data ));
+ debugBelch(")\n");
+ break;
+
+ case STABLE_NAME:
+ debugBelch("STABLE_NAME(%d)\n", ((StgStableName*)obj)->sn);
+ break;
+
+ case TSO:
+ debugBelch("TSO(");
+ debugBelch("%d (%p)",((StgTSO*)obj)->id, (StgTSO*)obj);
+ debugBelch(")\n");
+ break;
+
+#if defined(PAR)
+ case BLOCKED_FETCH:
+ debugBelch("BLOCKED_FETCH(");
+ printGA(&(stgCast(StgBlockedFetch*,obj)->ga));
+ printPtr((StgPtr)(stgCast(StgBlockedFetch*,obj)->node));
+ debugBelch(")\n");
+ break;
+
+ case FETCH_ME:
+ debugBelch("FETCH_ME(");
+ printGA((globalAddr *)stgCast(StgFetchMe*,obj)->ga);
+ debugBelch(")\n");
+ break;
+
+ case FETCH_ME_BQ:
+ debugBelch("FETCH_ME_BQ(");
+ // printGA((globalAddr *)stgCast(StgFetchMe*,obj)->ga);
+ printPtr((StgPtr)stgCast(StgFetchMeBlockingQueue*,obj)->blocking_queue);
+ debugBelch(")\n");
+ break;
+#endif
+
+#if defined(GRAN) || defined(PAR)
+ case RBH:
+ debugBelch("RBH(");
+ printPtr((StgPtr)stgCast(StgRBH*,obj)->blocking_queue);
+ debugBelch(")\n");
+ break;
+
+#endif
+
+#if 0
+ /* Symptomatic of a problem elsewhere, have it fall-through & fail */
+ case EVACUATED:
+ debugBelch("EVACUATED(");
+ printClosure((StgEvacuated*)obj->evacuee);
+ debugBelch(")\n");
+ break;
+#endif
+
+#if defined(PAR) && defined(DIST)
+ case REMOTE_REF:
+ debugBelch("REMOTE_REF(");
+ printGA((globalAddr *)stgCast(StgFetchMe*,obj)->ga);
+ debugBelch(")\n");
+ break;
+#endif
+