## diffname power/debugger.c 1992/1125 ## diff -e /dev/null /n/bootesdump/1992/1125/sys/src/9/power/debugger.c 0a #include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" IOQ dkbdq; IOQ dprintq; typedef struct Syslogbuf Syslogbuf; struct Syslogbuf { char *next; char buf[4*1024]; }; Syslogbuf syslogbuf[4]; static int dprint(char *fmt, ...) { char buf[PRINTSIZE]; int n; n = doprint(buf, buf+sizeof(buf), fmt, (&fmt+1)) - buf; dprintq.puts(&dprintq, buf, n); return n; } static int dgetline(char *p, int n) { int c; char *end, *start; char buf[1]; start = p; end = p + n - 1; for(;;){ c = getc(&dkbdq); if(c <= 0) continue; /* echo */ buf[0] = c; if(c == '\r' || c == '\n') dprintq.puts(&dprintq, "\r\n", 2); else dprintq.puts(&dprintq, buf, 1); if(c == '\b'){ if(p != start) p--; continue; } if(c == '\r' || c == '\n') break; if(p >= end) continue; *p++ = c; } *p = 0; return p - start; } static void printlog(char *cpu) { int i, c; char *p, *end; Syslogbuf *s; if(cpu == 0) i = 0; else i = atoi(cpu); if(i < 0 || i > 3) return; s = &syslogbuf[i]; end = s->next; p = end + 1; if(p >= &s->buf[sizeof(s->buf)]) p = s->buf; while(p != end){ c = *p & 0xff; if(c >= ' ' && c <= '~'){ if(c == '\r' || c == '\n') dprintq.puts(&dprintq, "\r\n", 2); else dprintq.puts(&dprintq, p, 1); } p++; if(p >= &s->buf[sizeof(s->buf)]) p = s->buf; } } static void printhex(char *start, char *len) { int i; ulong n; ulong *p; if(start == 0){ dprint("! h - hex display\r\n"); return; } n = strtoul(start, 0, 0); if((n & KZERO) == 0) return; p = (ulong *)n; if(len) n = strtoul(len, 0, 0); else n = 1; while(n > 0){ dprint("%lux/", p); for(i = 0; i < 8 && n > 0; i++, n--) dprint(" %lux", p[i]); dprint("\r\n"); } } static void printinfo(void) { Mach *mp; Proc *p; Page *pg; ulong l; int i; for(i = 0; i < 4; i++){ if((active.machs&(1<proc); dprint("mach[%d]->proc/ %lux\r\n", i, l); dprint("mach[%d]->splpc/ %lux\r\n", i, mp->splpc); if((l & 0xf0000000) == KZERO){ p = (Proc*)l; l = (ulong)(p->upage); if((l & 0xf0000000) == KZERO){ pg = (Page*)l; l = pg->pa; dprint("mach[%d]->proc->upage->pa/ %lux\r\n", i, l); } } } } void debugger(void *arg) { int n, level; char buf[256]; char *field[3]; USED(arg); /* * grab a port for a console */ duartspecial(3, &dprintq, &dkbdq, 9600); /* * sched() until we are on processor 1 */ for(;;){ level = splhi(); if(m->machno == 1) break; splx(level); sched(); } /* * take processor and process out of active groups */ active.machs &= ~(1<<1); splx(level); for(;;){ dprint("kdb> "); dgetline(buf, sizeof(buf)); memset(field, 0, sizeof(field)); n = getfields(buf, field, 3, ' '); if(n == 0) continue; switch(*field[0]){ case 'l': printlog(field[1]); break; case 'h': printhex(field[1], field[2]); break; case 'i': printinfo(); break; default: dprint("!commands are:\r\n"); dprint("! l - print cpu log\r\n"); dprint("! h - hex display\r\n"); dprint("! i - display some addresses\r\n"); break; } } } void syslog(char *str, int n) { Syslogbuf *s; int level; level = splhi(); s = &syslogbuf[m->machno]; if(s->next < s->buf || s->next >= &s->buf[sizeof(s->buf)]) s->next = s->buf; while(n-- > 0){ *s->next = *str++; if(s->next >= &s->buf[sizeof(s->buf)-1]) s->next = s->buf; else s->next++; } splx(level); } . ## diffname power/debugger.c 1992/1126 ## diff -e /n/bootesdump/1992/1125/sys/src/9/power/debugger.c /n/bootesdump/1992/1126/sys/src/9/power/debugger.c 180a /* * grab a port for a console */ initq(&dprintq); initq(&dkbdq); duartspecial(3, &dprintq, &dkbdq, 9600); . 167,171d 148c if(l & KZERO){ . 145c if(l & KZERO){ . 140,141c mp = (void*)(MACHADDR+i*BY2PG); . 124a p += 8; . 123c dprint(" %8.8lux", p[i]); . 110c n = strtoul(start, 0, 16); . 87,92c if(c == '\r' || c == '\n') dprintq.puts(&dprintq, "\r\n", 2); else if(c >= ' ' && c <= '~') dprintq.puts(&dprintq, p, 1); . ## diffname power/debugger.c 1992/1128 ## diff -e /n/bootesdump/1992/1126/sys/src/9/power/debugger.c /n/bootesdump/1992/1128/sys/src/9/power/debugger.c 209a dprint("! q - quit/rebooot\r\n"); . 204a case 'q': firmware(cpuserver ? PROM_AUTOBOOT : PROM_REINIT); break; . 83c if(p >= &s->buf[sizeof(s->buf)] || p < s->buf) . 80a if(s->next < s->buf || s->next >= &s->buf[sizeof(s->buf)]) s->next = s->buf; . 5a #include "io.h" . ## diffname power/debugger.c 1992/1129 ## diff -e /n/bootesdump/1992/1128/sys/src/9/power/debugger.c /n/bootesdump/1992/1129/sys/src/9/power/debugger.c 145a . ## diffname power/debugger.c 1992/1202 ## diff -e /n/bootesdump/1992/1129/sys/src/9/power/debugger.c /n/bootesdump/1992/1202/sys/src/9/power/debugger.c 155a l = (ulong)(mp->ur); dprint("mach[%d] ur/%lux", i, l); ur = (Ureg*)l; dprint(" &status/%lux &cause/%lux &sp/%lux &pc/%lux", &ur->status, &ur->cause, &ur->sp, &ur->pc); dprint("\r\n"); . 153c dprint("mach[%d] proc->upage->pa/%lux\r\n", i, l); . 144,145c dprint("mach[%d] proc/%lux\r\n", i, l); dprint("mach[%d] splpc/%lux\r\n", i, mp->splpc); . 135a Ureg *ur; . 6a #include "ureg.h" . ## diffname power/debugger.c 1993/0806 # deleted ## diff -e /n/bootesdump/1992/1202/sys/src/9/power/debugger.c /n/fornaxdump/1993/0806/sys/src/brazil/power/debugger.c 1,249d