/* -----------------------------------------------------------------------------
- * $Id: Printer.c,v 1.58 2003/04/01 17:09:40 sof Exp $
+ * $Id: Printer.c,v 1.63 2004/08/13 13:10:23 simonmar Exp $
*
* (c) The GHC Team, 1994-2000.
*
#include "Storage.h"
#include "Bytecodes.h" /* for InstrPtr */
#include "Disassembler.h"
+#include "Apply.h"
#include <stdlib.h>
#include <string.h>
#if defined(GRAN) || defined(PAR)
// HWL: explicit fixed header size to make debugging easier
-int fixed_hs = FIXED_HS, itbl_sz = sizeofW(StgInfoTable),
+int fixed_hs = sizeof(StgHeader), itbl_sz = sizeofW(StgInfoTable),
uf_sz=sizeofW(StgUpdateFrame);
#endif
printClosure(obj);
}
-static inline void
+STATIC_INLINE void
printStdObjHdr( StgClosure *obj, char* tag )
{
fprintf(stderr,"%s(",tag);
#else
fprintf(stderr,"CONSTR(");
printPtr((StgPtr)obj->header.info);
- fprintf(stderr,"(tag=%d)",info->srt_len);
+ fprintf(stderr,"(tag=%d)",info->srt_bitmap);
#endif
for (i = 0; i < info->layout.payload.ptrs; ++i) {
fprintf(stderr,", ");
case FUN_1_0: case FUN_0_1:
case FUN_1_1: case FUN_0_2: case FUN_2_0:
case FUN_STATIC:
- fprintf(stderr,"FUN/%d(",itbl_to_fun_itbl(info)->arity);
+ fprintf(stderr,"FUN/%d(",itbl_to_fun_itbl(info)->f.arity);
printPtr((StgPtr)obj->header.info);
#ifdef PROFILING
fprintf(stderr,", %s", obj->header.prof.ccs->cc->label);
StgClosure* c = (StgClosure*)(*sp);
printPtr((StgPtr)*sp);
- if (c == (StgClosure*)&stg_ctoi_ret_R1p_info) {
+ if (c == (StgClosure*)&stg_ctoi_R1p_info) {
fprintf(stderr, "\t\t\tstg_ctoi_ret_R1p_info\n" );
} else
- if (c == (StgClosure*)&stg_ctoi_ret_R1n_info) {
+ if (c == (StgClosure*)&stg_ctoi_R1n_info) {
fprintf(stderr, "\t\t\tstg_ctoi_ret_R1n_info\n" );
} else
- if (c == (StgClosure*)&stg_ctoi_ret_F1_info) {
+ if (c == (StgClosure*)&stg_ctoi_F1_info) {
fprintf(stderr, "\t\t\tstg_ctoi_ret_F1_info\n" );
} else
- if (c == (StgClosure*)&stg_ctoi_ret_D1_info) {
+ if (c == (StgClosure*)&stg_ctoi_D1_info) {
fprintf(stderr, "\t\t\tstg_ctoi_ret_D1_info\n" );
} else
- if (c == (StgClosure*)&stg_ctoi_ret_V_info) {
+ if (c == (StgClosure*)&stg_ctoi_V_info) {
fprintf(stderr, "\t\t\tstg_ctoi_ret_V_info\n" );
} else
if (get_itbl(c)->type == BCO) {
p = (P_)(r->payload);
printSmallBitmap(spBottom, sp,
- GET_LIVENESS(r->liveness), RET_DYN_SIZE);
- p += RET_DYN_SIZE;
+ RET_DYN_LIVENESS(r->liveness),
+ RET_DYN_BITMAP_SIZE);
+ p += RET_DYN_BITMAP_SIZE + RET_DYN_NONPTR_REGS_SIZE;
- for (size = GET_NONPTRS(dyn); size > 0; size--) {
+ for (size = RET_DYN_NONPTRS(dyn); size > 0; size--) {
fprintf(stderr," stk[%ld] (%p) = ", (long)(spBottom-p), p);
fprintf(stderr,"Word# %ld\n", (long)*p);
p++;
}
- for (size = GET_PTRS(dyn); size > 0; size--) {
+ for (size = RET_DYN_PTRS(dyn); size > 0; size--) {
fprintf(stderr," stk[%ld] (%p) = ", (long)(spBottom-p), p);
printPtr(p);
p++;
case RET_VEC_BIG:
barf("todo");
+ case RET_FUN:
+ {
+ StgFunInfoTable *fun_info;
+ StgRetFun *ret_fun;
+ nat size;
+
+ ret_fun = (StgRetFun *)sp;
+ fun_info = get_fun_itbl(ret_fun->fun);
+ size = ret_fun->size;
+ fprintf(stderr,"RET_FUN (%p) (type=%d)\n", ret_fun, fun_info->f.fun_type);
+ switch (fun_info->f.fun_type) {
+ case ARG_GEN:
+ printSmallBitmap(spBottom, sp+1,
+ BITMAP_BITS(fun_info->f.bitmap),
+ BITMAP_SIZE(fun_info->f.bitmap));
+ break;
+ case ARG_GEN_BIG:
+ printLargeBitmap(spBottom, sp+2,
+ (StgLargeBitmap *)fun_info->f.bitmap,
+ BITMAP_SIZE(fun_info->f.bitmap));
+ break;
+ default:
+ printSmallBitmap(spBottom, sp+1,
+ BITMAP_BITS(stg_arg_bitmaps[fun_info->f.fun_type]),
+ BITMAP_SIZE(stg_arg_bitmaps[fun_info->f.fun_type]));
+ break;
+ }
+ continue;
+ }
+
default:
+ fprintf(stderr, "unknown object %d\n", info->type);
barf("printStackChunk");
}
}
#endif /* HAVE_BFD_H */
-#include "StoragePriv.h"
-
void findPtr(P_ p, int); /* keep gcc -Wall happy */
void
nat s, g;
P_ q, r;
bdescr *bd;
+#if defined(__GNUC__)
const int arr_size = 1024;
+#else
+#define arr_size 1024
+#endif
StgPtr arr[arr_size];
int i = 0;