X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FDisassembler.c;h=574f0a8c432a7b3f2f8313857e7b9d598b54d0f5;hb=4ee658a72d01e21315a5467f66a6fd36f139e306;hp=72715a4bfe5c5ec84eff981e851c405be4bf569f;hpb=ba108537e489e74e088b210ee25c13ce09bcc572;p=ghc-hetmet.git diff --git a/ghc/rts/Disassembler.c b/ghc/rts/Disassembler.c index 72715a4..574f0a8 100644 --- a/ghc/rts/Disassembler.c +++ b/ghc/rts/Disassembler.c @@ -5,11 +5,11 @@ * Copyright (c) 1994-1998. * * $RCSfile: Disassembler.c,v $ - * $Revision: 1.16 $ - * $Date: 2000/12/20 14:47:22 $ + * $Revision: 1.23 $ + * $Date: 2001/08/09 11:19:16 $ * ---------------------------------------------------------------------------*/ -#ifdef GHCI +#ifdef DEBUG #include "Rts.h" #include "RtsAPI.h" @@ -44,6 +44,17 @@ int disInstr ( StgBCO *bco, int pc ) StgInfoTable** itbls = (StgInfoTable**)(&itbls_arr->payload[0]); switch (instrs[pc++]) { + case bci_SWIZZLE: + fprintf(stderr, "SWIZZLE stkoff %d by %d\n", + instrs[pc], (signed int)instrs[pc+1]); + pc += 2; break; + case bci_CCALL: + fprintf(stderr, "CCALL marshaller at 0x%x\n", + literals[instrs[pc]] ); + pc += 1; break; + case bci_STKCHECK: + fprintf(stderr, "STKCHECK %d\n", instrs[pc] ); + pc += 1; break; case bci_ARGCHECK: fprintf(stderr, "ARGCHECK %d\n", instrs[pc] ); pc += 1; break; @@ -58,11 +69,13 @@ 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]] ); fprintf(stderr, " 0x%x", literals[instrs[pc+1]] ); + fprintf(stderr, "\n"); pc += 2; break; case bci_PUSH_UBX: fprintf(stderr, "PUSH_UBX "); @@ -93,8 +106,16 @@ int disInstr ( StgBCO *bco, int pc ) case bci_PACK: fprintf(stderr, "PACK %d words with itbl ", instrs[pc+1] ); printPtr( (StgPtr)itbls[instrs[pc]] ); + fprintf(stderr, "\n"); pc += 2; break; + case bci_CASEFAIL: + fprintf(stderr, "CASEFAIL\n" ); + break; + case bci_JMP: + fprintf(stderr, "JMP to %d\n", instrs[pc]); + pc += 1; break; + case bci_TESTLT_I: fprintf(stderr, "TESTLT_I %d, fail to %d\n", literals[instrs[pc]], instrs[pc+1]); @@ -151,18 +172,40 @@ 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); } -#endif /* GHCI */ +#endif /* DEBUG */