int Reg(int argc,char *argv[]) { ulong reg; int opt, i, forscript; char *varname, buf[32]; forscript = 0; varname = (char *)0; while((opt=getopt(argc,argv,"sv:")) != -1) { switch(opt) { case 's': forscript = 1; break; case 'v': varname = optarg; break; default: return(CMD_PARAM_ERROR); } } if(argc == optind) { if(forscript) { for(i=0; i<REGTOT; i++) { printf("reg %s 0x%lx\n",regnames[i],regtbl[i]); } } else { showregs(); } return(CMD_SUCCESS); } else if(argc == optind + 1) { if(getreg(argv[optind],®) != -1) { sprintf(buf,"0x%lx",reg); if(varname) { setenv(varname,buf); } else { printf("%s = %s\n",argv[optind],buf); } } } else if(argc == optind + 2) { putreg(argv[1],strtol(argv[optind+1],(char **)0,0)); } else { return(CMD_PARAM_ERROR); } return(CMD_SUCCESS); }
static int command_usb(int argc, char **argv) { if (argc > 1) { if (!strcasecmp("on", argv[1])) usb_init(); else if (!strcasecmp("off", argv[1])) usb_release(); else if (!strcasecmp("a", argv[1])) select_phy(USB_SEL_PHY0); else if (!strcasecmp("b", argv[1])) select_phy(USB_SEL_PHY1); } showregs(); ccprintf("PHY %c\n", (which_phy == USB_SEL_PHY0 ? 'A' : 'B')); return EC_SUCCESS; }
/* exception(): * This function is called by from vectors_sh3.S when an exception occured. * The global variable ExceptionType is also set in vectors_sh3.S. * Resume after handling an exception is prepared in vectors_sh3.S but not * used so far. Right now exception handling always ends with a restart of * uMon. */ void exception(void) { extern void coldstart(); int vnum; char *vname; ulong pc; vnum = (int)(ExceptionType & 0xff); getreg("PC",&pc); printf("EXCEPTION: #%d ",vnum); /* Choose text for console output depending on the exception offset. */ switch(vnum) { case 1: vname = "(General exception)"; break; case 2: vname = "(TLB miss)"; break; case 3: vname = "(Interrupt)"; break; default: vname = "(Unknown)"; break; } printf("%s @ 0x%lx\n",vname,pc); ExceptionAddr = pc; showregs(); intsoff(); if (pollConsole("coldstart?")) { warmstart(APP_EXIT); } else { coldstart(); } }
static int command_usb(int argc, char **argv) { int val; if (argc > 1) { if (!strcasecmp("a", argv[1])) usb_select_phy(USB_SEL_PHY0); else if (!strcasecmp("b", argv[1])) usb_select_phy(USB_SEL_PHY1); else if (parse_bool(argv[1], &val)) { if (val) usb_init(); else usb_release(); } else return EC_ERROR_PARAM1; } showregs(); ccprintf("PHY %c\n", (which_phy == USB_SEL_PHY0 ? 'A' : 'B')); return EC_SUCCESS; }
int Strace(int argc,char *argv[]) { char *symfile, fname[64]; TFILE *tfp; ulong *framepointer, pc, fp, offset; int tfd, opt, maxdepth, pass, verbose, bullseye; tfd = fp = 0; maxdepth = 20; verbose = 0; pc = ExceptionAddr; while ((opt=getopt(argc,argv,"d:F:P:rs:v")) != -1) { switch(opt) { case 'd': maxdepth = atoi(optarg); break; case 'F': fp = strtoul(optarg,0,0); break; case 'P': pc = strtoul(optarg,0,0); break; case 'r': showregs(); break; case 'v': verbose = 1; break; default: return(0); } } if (!fp) getreg("A6", (ulong *)&framepointer); else framepointer = (ulong *)fp; /* Start by detecting the presence of a symbol table file... */ symfile = getenv("SYMFILE"); if (!symfile) symfile = SYMFILE; tfp = tfsstat(symfile); if (tfp) { tfd = tfsopen(symfile,TFS_RDONLY,0); if (tfd < 0) tfp = (TFILE *)0; } /* Show current position: */ printf(" 0x%08lx",pc); if (tfp) { AddrToSym(tfd,pc,fname,&offset); printf(": %s()",fname); if (offset) printf(" + 0x%lx",offset); } putchar('\n'); /* Now step through the stack frame... */ bullseye = pass = 0; while(maxdepth) { /* ADD_CODE_HERE */ } if (!maxdepth) printf("Max depth termination\n"); if (tfp) { tfsclose(tfd,0); } return(0); }