9 char buf[128], lastcmd[128];
16 char* term(char*, ulong*);
21 while(*p && (*p == ' ' || *p == '\t') && *p != '\n')
31 numsym(char *addr, ulong *val)
34 static char *delim = "`'<>/\\@*|-~+-/=?\n";
47 if(strcmp(tsym, ".") == 0) {
52 if(lookup(0, tsym, &s))
56 *val = strtoul(tsym+1, 0, 16);
58 *val = strtoul(tsym, 0, 0);
72 addr = numsym(addr, &t);
82 Bprint(bioout, "expr syntax\n");
105 buildargv(char *str, char **args, int max)
110 while((*str == ' ' || *str == '\t' || *str == '\n') && *str != '\0')
117 while(!(*str == ' ' || *str == '\t'|| *str == '\n') && *str != '\0')
132 colon(char *addr, char *cp)
141 Bprint(bioout, "?\n");
144 breakpoint(addr, cp+1);
151 /* These fall through to print the stopped address */
154 argc = buildargv(cp+1, argv, 100);
169 count = strtoul(cp, 0, 0);
178 Bprint(bioout, "%s at #%lux ", atbpt ? "breakpoint" : "stopped", dot);
179 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
180 Bprint(bioout, tbuf);
184 Bprint(bioout, "\n");
194 Bprint(bioout, "?\n");
235 Bprint(bioout, ":t[0sic]\n");
261 Bprint(bioout, "$i[isa]\n");
282 pfmt(char fmt, int mem, ulong val)
286 char *p, ch, str[1024];
291 Bprint(bioout, "bad modifier\n");
294 c = Bprint(bioout, "%-4lo ", mem ? (ushort)getmem_2(dot) : val);
299 c = Bprint(bioout, "%-8lo ", mem ? getmem_4(dot) : val);
304 c = Bprint(bioout, "%-4lo ", mem ? (short)getmem_2(dot) : val);
309 c = Bprint(bioout, "%-8lo ", mem ? (long)getmem_4(dot) : val);
314 c = Bprint(bioout, "%-5ld ", mem ? (short)getmem_2(dot) : val);
320 c = Bprint(bioout, "%-8ld ", mem ? (long)getmem_4(dot) : val);
325 c = Bprint(bioout, "#%-4lux ", mem ? (long)getmem_2(dot) : val);
330 c = Bprint(bioout, "#%-8lux ", mem ? (long)getmem_4(dot) : val);
335 c = Bprint(bioout, "%-5ld ", mem ? (ushort)getmem_2(dot) : val);
340 c = Bprint(bioout, "%-8ld ", mem ? (ulong)getmem_4(dot) : val);
345 c = Bprint(bioout, "%-3ld ", mem ? getmem_b(dot) : val);
350 c = Bprint(bioout, "%c ", (int)(mem ? getmem_b(dot) : val));
355 ch = mem ? getmem_b(dot) : val;
357 c = Bprint(bioout, "%c ", ch);
359 c = Bprint(bioout, "\\x%.2x ", ch);
365 while(ch = getmem_b(dot+i))
369 c = Bprint(bioout, "%s", str);
375 while(ch = getmem_b(dot+i))
379 for(p = str; *p; p++)
381 c += Bprint(bioout, "%c", *p);
383 c += Bprint(bioout, "\\x%.2ux", *p);
388 p = ctime(mem ? getmem_b(dot) : val);
390 c = Bprint(bioout, "%s", p);
395 symoff(str, sizeof(str), dot, CTEXT);
396 Bprint(bioout, "%s", str);
401 for (i = 0; globalsym(&s, i); i++)
402 Bprint(bioout, "%-15s #%lux\n", s.name, getmem_4(s.value));
408 inc = machdata->das(symmap, dot, fmt, str, sizeof(str));
410 Bprint(bioout, "qi: %r\n");
413 c = Bprint(bioout, "\t%s", str);
438 if (findsym(dot, CTEXT, &s))
439 Bprint(bioout, " %s() ", s.name);
448 eval(char *addr, char *p)
459 Bprint(bioout, "\n");
469 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
470 Bprint(bioout, "%s?\t", tbuf);
475 for(p++; *p && *p != '"'; p++) {
484 while(*p >= '0' && *p <= '9')
485 count = count*10 + (*p++ - '0');
493 for(i = 0; i < count; i++) {
497 Bprint(bioout, "\n");
498 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
499 Bprint(bioout, "%s?\t", tbuf);
506 Bprint(bioout, "\n");
510 catcher(void *a, char *msg)
513 if(strcmp(msg, "interrupt") != 0)
522 setreg(char *addr, char *cp)
528 if(strcmp(cp, "pc") == 0) {
532 if(strcmp(cp, "sp") == 0) {
536 if(strcmp(cp, "lr") == 0) {
540 if(strcmp(cp, "ctr") == 0) {
544 if(strcmp(cp, "fpscr") == 0) {
548 if(strcmp(cp, "xer") == 0) {
552 if(strcmp(cp, "cr") == 0) {
557 rn = strtoul(cp, 0, 10);
558 if(rn > 0 && rn < 32) {
563 Bprint(bioout, "bad register\n");
569 char *p, *a, *cp, *gotint;
571 static char *cmdlet = ":$?/=>";
594 strcpy(buf, lastcmd);
597 strcpy(lastcmd, buf);
604 if(*p == 0 || strchr(cmdlet, *p))
611 cp = strchr(addr, ',');
614 cmdcount = strtoul(cp+2, &gotint, 16);
616 cmdcount = strtoul(cp+1, &gotint, 0);
630 for(i = 0; i < cmdcount; i++)
640 Bprint(bioout, "?\n");