/************************************************************* * File: mon/dis.c * Purpose: Part of core Monitor * Author: Phil Bunce (pjb@carmel.com) * Revision History: * 970304 Start of revision history * 970507 Added mips16 disassembly */ #include #include Optdesc l_opts[] = { {"[-bct][adr [cnt]]","list (disassemble) memory"}, {"-b","list only branches"}, {"-c","list only calls"}, {"-t","list trace buffer"}, {"-T","assume TinyRISC instrs"}, {0}}; /* used by -b option, list only branches */ char *brlst[] = { "j","jr","jal","jalr","break","syscall","rfe","beq","bne", "bltzal","bltz","blez","bgtz","bgezal","bgez", "bc0t","bc0f","bc1t","bc1f","bc2t","bc2f","bc3t","bc3f", "blezl","bgtzl","bltzl","bgezl","bltzall","bgezall", "bc0tl","bc0fl","bc1tl","bc1fl","bc2tl","bc2fl","bc3tl","bc3fl", "beql","bnel", 0}; /* used by -c option, list only calls */ char *cllst[] = {"jal","jalr","bgezal","bltzal","bgezall","bltzall",0}; /************************************************************* * dis(ac,av) * the 'l' (disassemble) command */ dis(ac,av) int ac; char *av[]; { ADDR adr; int siz,l; char v; char instr[20],*p,**q; int bflag,cflag,i,j,n,tflag,Tflag; U64 rv; bflag = cflag = n = tflag = Tflag = 0; if (!regChain) { printf("Target Description Driver not loaded\n"); return(1); } if (!atob(&siz,getMonEnv("moresz"),10)) { printf("%s: bad moresz value\n",getMonEnv("moresz")); return(1); } adr = getPc(); for (i=1;i1)?0:siz)) break; if (cflag || bflag) printf("%s",searching); } } /************************************************************* * dispchist(args,siz) * display the pc history (trace buffer) */ dispchist(args,siz) int args,siz; { int i,l; unsigned long adr; l = siz; for (i=0;;i++) { adr = getpchist(i); if (adr == 0) break; disasm(prnbuf,adr,read_target32(adr)); if (more(prnbuf,&l,(args>1)?0:siz)) break; } }