summaryrefslogtreecommitdiff
path: root/ghc/rts/Disassembler.c
diff options
context:
space:
mode:
Diffstat (limited to 'ghc/rts/Disassembler.c')
-rw-r--r--ghc/rts/Disassembler.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/ghc/rts/Disassembler.c b/ghc/rts/Disassembler.c
index 72715a4bfe..29d40d6479 100644
--- a/ghc/rts/Disassembler.c
+++ b/ghc/rts/Disassembler.c
@@ -5,8 +5,8 @@
* Copyright (c) 1994-1998.
*
* $RCSfile: Disassembler.c,v $
- * $Revision: 1.16 $
- * $Date: 2000/12/20 14:47:22 $
+ * $Revision: 1.17 $
+ * $Date: 2001/01/03 16:44:30 $
* ---------------------------------------------------------------------------*/
#ifdef GHCI
@@ -58,7 +58,8 @@ int disInstr ( StgBCO *bco, int pc )
instrs[pc+2] );
pc += 3; break;
case bci_PUSH_G:
- fprintf(stderr, "PUSH_G " ); printPtr( ptrs[instrs[pc]] );
+ fprintf(stderr, "PUSH_G " ); printPtr( ptrs[instrs[pc]] );
+ fprintf(stderr, "\n" );
pc += 1; break;
case bci_PUSH_AS:
fprintf(stderr, "PUSH_AS " ); printPtr( ptrs[instrs[pc]] );
@@ -151,17 +152,39 @@ int disInstr ( StgBCO *bco, int pc )
*/
void disassemble( StgBCO *bco )
{
+ nat i, j;
StgArrWords* instr_arr = bco->instrs;
UShort* instrs = (UShort*)(&instr_arr->payload[0]);
- int nbcs = (int)instrs[0];
- int pc = 1;
+ StgMutArrPtrs* ptrs = bco->ptrs;
+ nat nbcs = (int)instrs[0];
+ nat pc = 1;
- fprintf(stderr, "\n\nBCO %p =\n", bco );
+ fprintf(stderr, "BCO\n" );
pc = 1;
while (pc <= nbcs) {
fprintf(stderr, "\t%2d: ", pc );
pc = disInstr ( bco, pc );
}
+
+ fprintf(stderr, "INSTRS:\n " );
+ j = 16;
+ for (i = 0; i < nbcs; i++) {
+ fprintf(stderr, "%3d ", (int)instrs[i] );
+ j--;
+ if (j == 0) { j = 16; fprintf(stderr, "\n "); };
+ }
+ fprintf(stderr, "\n");
+
+ fprintf(stderr, "PTRS:\n " );
+ j = 8;
+ for (i = 0; i < ptrs->ptrs; i++) {
+ fprintf(stderr, "%8p ", ptrs->payload[i] );
+ j--;
+ if (j == 0) { j = 8; fprintf(stderr, "\n "); };
+ }
+ fprintf(stderr, "\n");
+
+ fprintf(stderr, "\n");
ASSERT(pc == nbcs+1);
}