## diffname gnot/trap.c 1990/03091 ## diff -e /dev/null /n/bootesdump/1990/03091/sys/src/9/68020/trap.c 0a #include "u.h" #include "lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "ureg.h" #include "io.h" void notify(Ureg*); void noted(Ureg**); void rfnote(Ureg**); char *regname[]={ "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", }; long ticks; char *trapname[]={ "reset isp", "reset ipc", "bus error", "address error", "illegal instruction", "zero divide", "chk, chk2 instruction", "cptrapcc, trapcc, trapv instruction", "privilege violation", "trace", "line 1010 emulator", "line 1111 emulator", "reserved", "coprocessor protocol violation", "format error", "uninitialized interrupt", "unassigned 0x40", "unassigned 0x44", "unassigned 0x48", "unassigned 0x4C", "unassigned 0x50", "unassigned 0x54", "unassigned 0x58", "unassigned 0x5C", "spurious interrupt", "level 1 autovector (tac)", "level 2 autovector (port)", "level 3 autovector (incon)", "level 4 autovector (mouse)", "level 5 autovector (uart)", "level 6 autovector (sync)", "level 7 autovector", }; char* excname(unsigned vo) { static char buf[32]; /* BUG: not reentrant! */ vo &= 0x0FFF; vo >>= 2; if(vo < sizeof trapname/sizeof(char*)) return trapname[vo]; sprint(buf, "offset 0x%ux", vo<<2); return buf; } void trap(Ureg *ur) { int user; char buf[64]; user = !(ur->sr&SUPER); if(u) u->p->pc = ur->pc; /* BUG */ if(user){ sprint(buf, "pc=%lux trap: %s", ur->pc, excname(ur->vo)); postnote(u->p, 1, buf, NDebug); }else{ print("kernel trap vo=%ux pc=%lux\n", ur->vo, ur->pc); dumpregs(ur); exit(); } if(user && u->nnote) notify(ur); } void dumpstack(void) { ulong l, v; extern ulong etext; if(u) for(l=(ulong)&l; lp->text, u->p->pid); else print("registers for kernel\n"); print("SR=%ux PC=%lux VO=%lux, USP=%lux\n", ur->sr, ur->pc, ur->vo, ur->usp); l = &ur->r0; for(i=0; ip->debug); if(u->nnote==0){ unlock(&u->p->debug); return; } if(u->note[0].flag!=NUser && (u->notified || u->notify==0)){ if(u->note[0].flag == NDebug) pprint("suicide: %s\n", u->note[0].msg); Die: unlock(&u->p->debug); pexit(u->note[0].msg, u->note[0].flag!=NDebug); } if(!u->notified){ if(!u->notify) goto Die; #ifdef asdfasdf sp = ur->sp; sp -= sizeof(Ureg); u->ureg = (void*)sp; memcpy((Ureg*)sp, ur, sizeof(Ureg)); sp -= ERRLEN; memcpy((char*)sp, u->note[0].msg, ERRLEN); sp -= 3*BY2WD; *(ulong*)(sp+2*BY2WD) = sp+3*BY2WD; /* arg 2 is string */ *(ulong*)(sp+1*BY2WD) = (ulong)u->ureg; /* arg 1 is ureg* */ *(ulong*)(sp+0*BY2WD) = 0; /* arg 0 is pc */ ur->sp = sp; ur->pc = (ulong)u->notify; u->notified = 1; u->nnote--; memcpy(&u->note[0], &u->note[1], u->nnote*sizeof(Note)); #endif panic("notify"); } unlock(&u->p->debug); } /* * Return user to state before notify() */ void noted(Ureg **urp) { #ifdef asdfasdf lock(&u->p->debug); u->notified = 0; memcpy(*urp, u->ureg, sizeof(Ureg)); unlock(&u->p->debug); splhi(); rfnote(urp); #endif panic("noted"); } #undef CHDIR /* BUG */ #include "/sys/src/libc/680209sys/sys.h" typedef long Syscall(ulong*); Syscall sysr1, sysfork, sysexec, sysgetpid, syssleep, sysexits, syslasterr, syswait; Syscall sysopen, sysclose, sysread, syswrite, sysseek, syserrstr, sysaccess, sysstat, sysfstat; Syscall sysdup, syschdir, sysforkpgrp, sysbind, sysmount, syspipe, syscreate, sysuserstr; Syscall sysbrk_, sysremove, syswstat, sysfwstat; Syscall *systab[]={ sysr1, sysaccess, sysbind, syschdir, sysclose, sysdup, syserrstr, sysexec, sysexits, sysfork, sysforkpgrp, sysfstat, syslasterr, sysmount, sysopen, sysread, sysseek, syssleep, sysstat, syswait, syswrite, syspipe, syscreate, sysuserstr, sysbrk_, sysremove, syswstat, sysfwstat, }; long syscall(Ureg *aur) { long ret; ulong sp; ulong r0; Ureg *ur; u->p->insyscall = 1; ur = aur; if(ur->sr & SUPER) panic("recursive system call"); #ifdef asdf /* * since the system call interface does not * guarantee anything about registers */ if(u->p->fpstate == FPactive) { u->p->fpstate = FPinit; /* BUG */ ur->status &= ~CU1; } #endif r0 = ur->r0; sp = ur->usp; if(r0 >= sizeof systab/BY2WD) panic("syscall %d\n", r0); if(sp & (BY2WD-1)) panic("syscall odd sp"); if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-4*BY2WD)) validaddr(sp, 4*BY2WD, 0); u->nerrlab = 0; ret = -1; if(!waserror()) ret = (*systab[r0])((ulong*)(sp+BY2WD)); u->nerrlab = 0; u->p->insyscall = 0; if(r0 == NOTED) /* ugly hack */ noted(&aur); /* doesn't return */ if(u->nnote){ ur->r0 = ret; notify(ur); } {ulong *arg=(ulong*)(sp+BY2WD); if(ret==-1)print("syscall %d(%lux %lux %lux) returns error %d\n", r0, arg[0], arg[1], arg[2], u->error.code);} return ret; } void error(Chan *c, int code) { if(c){ u->error.type = c->type; u->error.dev = c->dev; }else{ u->error.type = 0; u->error.dev = 0; } u->error.code = code; nexterror(); } void nexterror(void) { gotolabel(&u->errlab[--u->nerrlab]); } . ## diffname gnot/trap.c 1990/0312 ## diff -e /n/bootesdump/1990/03091/sys/src/9/68020/trap.c /n/bootesdump/1990/0312/sys/src/9/68020/trap.c 246a u->p->pc = ur->pc; . ## diffname gnot/trap.c 1990/0315 ## diff -e /n/bootesdump/1990/0312/sys/src/9/68020/trap.c /n/bootesdump/1990/0315/sys/src/9/68020/trap.c 281,282d ## diffname gnot/trap.c 1990/0321 ## diff -e /n/bootesdump/1990/0315/sys/src/9/68020/trap.c /n/bootesdump/1990/0321/sys/src/9/68020/trap.c 272a else print("syscall %d err %d %d\n", r0, u->error.type, u->error.code); . ## diffname gnot/trap.c 1990/0322 ## diff -e /n/bootesdump/1990/0321/sys/src/9/68020/trap.c /n/bootesdump/1990/0322/sys/src/9/68020/trap.c 273c /* else print("syscall %d err %d %d\n", r0, u->error.type, u->error.code); /**/ . ## diffname gnot/trap.c 1990/0511 ## diff -e /n/bootesdump/1990/0322/sys/src/9/68020/trap.c /n/bootesdump/1990/0511/sys/src/9/68020/trap.c 271,273c if(!waserror()){ if(r1 >= sizeof systab/BY2WD){ pprint("bad sys call number %d pc %lux\n", r1, ((Ureg*)UREGADDR)->pc); msg = "bad sys call"; Bad: postnote(u->p, 1, msg, NDebug); error(0, Ebadarg); } if(sp & (BY2WD-1)){ pprint("odd sp in sys call pc %lux sp %lux\n", ((Ureg*)UREGADDR)->pc, ((Ureg*)UREGADDR)->sp); msg = "odd stack"; goto Bad; } if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-4*BY2WD)) validaddr(ur->sp, 4*BY2WD, 0); ret = (*systab[r1])((ulong*)(sp+2*BY2WD)); } . 262,267d ## diffname gnot/trap.c 1990/0513 ## diff -e /n/bootesdump/1990/0511/sys/src/9/68020/trap.c /n/bootesdump/1990/0513/sys/src/9/68020/trap.c 280c ret = (*systab[r0])((ulong*)(sp+2*BY2WD)); . 266,267c if(r0 >= sizeof systab/BY2WD){ pprint("bad sys call number %d pc %lux\n", r0, ((Ureg*)UREGADDR)->pc); . 243a char *msg; . 7a #include "errno.h" . ## diffname gnot/trap.c 1990/0515 ## diff -e /n/bootesdump/1990/0513/sys/src/9/68020/trap.c /n/bootesdump/1990/0515/sys/src/9/68020/trap.c 281,282c validaddr(sp, 4*BY2WD, 0); ret = (*systab[r0])((ulong*)(sp+BY2WD)); . ## diffname gnot/trap.c 1990/0619 ## diff -e /n/bootesdump/1990/0515/sys/src/9/68020/trap.c /n/bootesdump/1990/0619/sys/src/9/68020/trap.c 188a if(!u->notified){ unlock(&u->p->debug); return; } . ## diffname gnot/trap.c 1990/08141 ## diff -e /n/bootesdump/1990/0619/sys/src/9/68020/trap.c /n/bootesdump/1990/08141/sys/src/9/68020/trap.c 239a sysnotify, sysnoted, . 209c Syscall sysbrk_, sysremove, syswstat, sysfwstat, sysnotify, sysnoted; . ## diffname gnot/trap.c 1990/0816 ## diff -e /n/bootesdump/1990/08141/sys/src/9/68020/trap.c /n/bootesdump/1990/0816/sys/src/9/68020/trap.c 198,199d 187d 175,176d 170c ur->usp = sp; . 159,160c sp = ur->usp; . ## diffname gnot/trap.c 1990/08163 ## diff -e /n/bootesdump/1990/0816/sys/src/9/68020/trap.c /n/bootesdump/1990/08163/sys/src/9/68020/trap.c 261c spllo(); . 257,259c splhi(); fpsave(&u->fpsave); if(u->p->fpstate==FPactive || u->fpsave.type){ fprestore((FPsave*)&fpnull); u->p->fpstate = FPinit; m->fpstate = FPinit; . 255c * guarantee anything about registers, but the fpcr is more than * just a register... BUG . 252d 245a long fpnull = 0; . ## diffname gnot/trap.c 1990/0905 ## diff -e /n/bootesdump/1990/08163/sys/src/9/68020/trap.c /n/bootesdump/1990/0905/sys/src/9/68020/trap.c 261c fprestore(&initfp); . 246d 97c print("kernel trap vo=0x%ux pc=%lux\n", ur->vo, ur->pc); . ## diffname gnot/trap.c 1990/1104 ## diff -e /n/bootesdump/1990/0905/sys/src/9/68020/trap.c /n/bootesdump/1990/1104/sys/src/9/68020/trap.c 235a sysfilsys, . 203c Syscall sysbrk_, sysremove, syswstat, sysfwstat, sysnotify, sysnoted, sysfilsys; . ## diffname gnot/trap.c 1990/1110 ## diff -e /n/bootesdump/1990/1104/sys/src/9/68020/trap.c /n/bootesdump/1990/1110/sys/src/9/68020/trap.c 281c msg = "sys: odd stack"; . 274c msg = "sys: bad sys call"; . 94c sprint(buf, "sys: trap: %s", ur->pc, excname(ur->vo)); . ## diffname gnot/trap.c 1990/11211 ## diff -e /n/bootesdump/1990/1110/sys/src/9/68020/trap.c /n/bootesdump/1990/11211/sys/src/9/68020/trap.c 311a void errors(char *err) { strncpy(u->error, err, NAMELEN); nexterror(); } . 302,309c strncpy(u->error, errstrtab[code], NAMELEN); . 300c error(int code) . 298a #include "errstr.h" . 284,285c if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-5*BY2WD)) validaddr(sp, 5*BY2WD, 0); . 277c error(Ebadarg); . 236c sysdeath, /* sysfilsys */ . 229c sysdeath, . 218c sysdeath, . 212c sysdeath, . 207c syserrstr, . 202,203c Syscall sysdup, syschdir, sysforkpgrp, sysbind, sysmount, syspipe, syscreate; Syscall sysbrk_, sysremove, syswstat, sysfwstat, sysnotify, sysnoted; . 200c Syscall sysr1, sysfork, sysexec, sysgetpid, syssleep, sysexits, sysdeath, syswait; . ## diffname gnot/trap.c 1990/1127 ## diff -e /n/bootesdump/1990/11211/sys/src/9/68020/trap.c /n/bootesdump/1990/1127/sys/src/9/68020/trap.c 97c print("kernel trap vo=0x%ux pc=0x%lux\n", ur->vo, ur->pc); . 94c sprint(buf, "sys: trap: pc=0x%lux %s", ur->pc, excname(ur->vo)); . ## diffname gnot/trap.c 1990/1226 ## diff -e /n/bootesdump/1990/1127/sys/src/9/68020/trap.c /n/bootesdump/1990/1226/sys/src/9/68020/trap.c 298a void execpc(ulong entry) { ((Ureg*)UREGADDR)->pc = entry; } . ## diffname gnot/trap.c 1991/0115 ## diff -e /n/bootesdump/1990/1226/sys/src/9/68020/trap.c /n/bootesdump/1991/0115/sys/src/9/68020/trap.c 310c strncpy(u->error, errstrtab[code], ERRLEN); . ## diffname gnot/trap.c 1991/0318 ## diff -e /n/bootesdump/1991/0201/sys/src/9/68020/trap.c /n/bootesdump/1991/0318/sys/src/9/gnot/trap.c 190c memmove(*urp, u->ureg, sizeof(Ureg)); . 173c memmove(&u->note[0], &u->note[1], u->nnote*sizeof(Note)); . 164c memmove((char*)sp, u->note[0].msg, ERRLEN); . 162c memmove((Ureg*)sp, ur, sizeof(Ureg)); . ## diffname gnot/trap.c 1991/0322 ## diff -e /n/bootesdump/1991/0318/sys/src/9/gnot/trap.c /n/bootesdump/1991/0322/sys/src/9/gnot/trap.c 317c strncpy(u->error, err, ERRLEN); . ## diffname gnot/trap.c 1991/0503 ## diff -e /n/bootesdump/1991/0322/sys/src/9/gnot/trap.c /n/bootesdump/1991/0503/sys/src/9/gnot/trap.c 291c noted(aur); /* doesn't return */ . 193c rfnote(ur); . 190c memmove(ur, u->ureg, sizeof(Ureg)); . 183a Ureg *nur; nur = u->ureg; validaddr(nur->pc, 1, 0); validaddr(nur->usp, BY2WD, 0); if(nur->sr!=u->svsr || nur->vo!=u->svvo){ pprint("bad noted ureg sr %ux vo %ux\n", nur->sr, nur->vo); pexit("Suicide", 0); } . 182c noted(Ureg *ur) . 158a u->svvo = ur->vo; u->svsr = ur->sr; . 11,12c void noted(Ureg*); void rfnote(Ureg*); . ## diffname gnot/trap.c 1991/0513 ## diff -e /n/bootesdump/1991/0503/sys/src/9/gnot/trap.c /n/bootesdump/1991/0513/sys/src/9/gnot/trap.c 223c sysalarm, . 214c Syscall sysbrk_, sysremove, syswstat, sysfwstat, sysnotify, sysnoted, sysalarm; . ## diffname gnot/trap.c 1991/0614 ## diff -e /n/bootesdump/1991/0513/sys/src/9/gnot/trap.c /n/bootesdump/1991/0614/sys/src/9/gnot/trap.c 299c if(u->nerrlab){ print("unbalanced error stack: %d extra\n", u->nerrlab); for(i = 0; i < NERR; i++) print("sp=%lux pc=%lux\n", u->errlab[i].sp, u->errlab[i].pc); panic("bad rob"); } . 297a poperror(); . 295,296c if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-(1+MAXSYSARG)*BY2WD)) validaddr(sp, (1+MAXSYSARG)*BY2WD, 0); . 252a int i; . ## diffname gnot/trap.c 1991/0705 ## diff -e /n/bootesdump/1991/0614/sys/src/9/gnot/trap.c /n/bootesdump/1991/0705/sys/src/9/gnot/trap.c 308c if(r0 == NOTED) /* ugly hack */ . 306a #endif . 302c print("bad errstack [%d]: %d extra\n", r0, u->nerrlab); . 300a #ifdef Check . 292c pprint("odd sp in sys call pc %lux sp %lux\n", ((Ureg*)UREGADDR)->pc, ((Ureg*)UREGADDR)->sp); . 247c syssegattach, syssegdetach, syssegfree, syssegflush, . 229c syssegbrk, . 214a Syscall syssegattach, syssegdetach, syssegfree, syssegflush, syssegbrk; . 132a for(;;); . 100a . 94c sprint(buf, "sys: %s pc=0x%lux", excname(ur->vo), ur->pc); . ## diffname gnot/trap.c 1991/0709 ## diff -e /n/bootesdump/1991/0705/sys/src/9/gnot/trap.c /n/bootesdump/1991/0709/sys/src/9/gnot/trap.c 316d 314c panic("error stack"); . 309d ## diffname gnot/trap.c 1991/0710 ## diff -e /n/bootesdump/1991/0709/sys/src/9/gnot/trap.c /n/bootesdump/1991/0710/sys/src/9/gnot/trap.c 331,353d 210c #include "/sys/src/libc/9syscall/sys.h" . ## diffname gnot/trap.c 1991/0717 ## diff -e /n/bootesdump/1991/0710/sys/src/9/gnot/trap.c /n/bootesdump/1991/0717/sys/src/9/gnot/trap.c 319c noted(aur, *(ulong*)(sp+BY2WD)); /* doesn't return */ . 204,206c ur->r0 = -1; /* return error from the interrupted call */ switch(arg0){ case NCONT: splhi(); unlock(&u->p->debug); rfnote(ur); break; /* never returns */ default: pprint("unknown noted arg 0x%lux\n", arg0); u->lastnote.flag = NDebug; /* fall through */ case NTERM: if(u->lastnote.flag == NDebug) pprint("suicide: %s\n", u->lastnote.msg); unlock(&u->p->debug); pexit(u->lastnote.msg, u->lastnote.flag!=NDebug); } . 186c noted(Ureg *ur, ulong arg0) . 176a memmove(&u->lastnote, &u->note[0], sizeof(Note)); . 11c void noted(Ureg*, ulong); . ## diffname gnot/trap.c 1991/0718 ## diff -e /n/bootesdump/1991/0717/sys/src/9/gnot/trap.c /n/bootesdump/1991/0718/sys/src/9/gnot/trap.c 219c case NDFLT: . ## diffname gnot/trap.c 1991/0719 ## diff -e /n/bootesdump/1991/0718/sys/src/9/gnot/trap.c /n/bootesdump/1991/0719/sys/src/9/gnot/trap.c 174a ur->vo = 0x0080; /* pretend we're returning from syscall */ . ## diffname gnot/trap.c 1991/0722 ## diff -e /n/bootesdump/1991/0719/sys/src/9/gnot/trap.c /n/bootesdump/1991/0722/sys/src/9/gnot/trap.c 164a if(waserror()){ pprint("suicide: trap in notify\n"); unlock(&u->p->debug); pexit("Suicide", 0); } validaddr((ulong)u->notify, 1, 0); validaddr(sp-ERRLEN-3*BY2WD, sizeof(Ureg)+ERRLEN-3*BY2WD, 0); poperror(); . ## diffname gnot/trap.c 1991/0725 ## diff -e /n/bootesdump/1991/0722/sys/src/9/gnot/trap.c /n/bootesdump/1991/0725/sys/src/9/gnot/trap.c 347c if(u->nnote && r0!=FORK){ . 214d ## diffname gnot/trap.c 1991/0727 ## diff -e /n/bootesdump/1991/0725/sys/src/9/gnot/trap.c /n/bootesdump/1991/0727/sys/src/9/gnot/trap.c 150a u->p->notepending = 0; . ## diffname gnot/trap.c 1991/0731 ## diff -e /n/bootesdump/1991/0727/sys/src/9/gnot/trap.c /n/bootesdump/1991/0731/sys/src/9/gnot/trap.c 317c if(r0 >= sizeof systab/sizeof systab[0]){ . 239,282d 236,237c #include "../port/systab.h" . ## diffname gnot/trap.c 1991/0814 ## diff -e /n/bootesdump/1991/0731/sys/src/9/gnot/trap.c /n/bootesdump/1991/0814/sys/src/9/gnot/trap.c 216a if(waserror()){ pprint("suicide: trap in noted\n"); unlock(&u->p->debug); goto Die; } validaddr(nur->pc, 1, 0); validaddr(nur->usp, BY2WD, 0); poperror(); . 211c pprint("call to noted() when not notified\n"); goto Die; . 205a Die: . 202,203d ## diffname gnot/trap.c 1991/0821 ## diff -e /n/bootesdump/1991/0814/sys/src/9/gnot/trap.c /n/bootesdump/1991/0821/sys/src/9/gnot/trap.c 134c . ## diffname gnot/trap.c 1991/0926 ## diff -e /n/bootesdump/1991/0821/sys/src/9/gnot/trap.c /n/bootesdump/1991/0926/sys/src/9/gnot/trap.c 306a u->p->psstate = 0; . 294a u->p->psstate = sysctab[r0]; . ## diffname gnot/trap.c 1991/1108 ## diff -e /n/bootesdump/1991/0926/sys/src/9/gnot/trap.c /n/bootesdump/1991/1108/sys/src/9/gnot/trap.c 300,305c u->nerrlab = 0; if(u->p->procctl) procctl(u->p); . 273a if(u->p->procctl) procctl(u->p); . 102,103c if(user) { if(u->p->procctl) procctl(u->p); if(u->nnote) notify(ur); } . ## diffname gnot/trap.c 1991/1112 ## diff -e /n/bootesdump/1991/1108/sys/src/9/gnot/trap.c /n/bootesdump/1991/1112/sys/src/9/gnot/trap.c 327a } /* This routine must save the values of registers the user is not permitted to write * from devproc and the restore the saved values before returning */ void setregisters(Ureg *xp, char *pureg, char *uva, int n) { ushort sr; ulong magic; ushort vo; char microstate[UREGVARSZ]; sr = xp->sr; vo = xp->vo; magic = xp->magic; memmove(microstate, xp->microstate, UREGVARSZ); memmove(pureg, uva, n); xp->sr = (sr&0xff00) |(xp->sr&0xff); xp->vo = vo; xp->magic = magic; memmove(xp->microstate, microstate, UREGVARSZ); . 317c if(u->p->procctl || (u->nnote && r0!=FORK)){ . 309,311d 261a u->dbgreg = aur; . 154c lock(&u->p->debug); . 150,152c if(u->p->procctl) procctl(u->p); if(u->nnote==0) . 102,107c if(user) notify(ur); . 92a u->dbgreg = ur; } . 91c if(u) { . ## diffname gnot/trap.c 1991/1113 ## diff -e /n/bootesdump/1991/1112/sys/src/9/gnot/trap.c /n/bootesdump/1991/1113/sys/src/9/gnot/trap.c 99c print("kernel trap %s pc=0x%lux\n", excname(ur->vo, ur->pc), ur->pc); . 96c sprint(buf, "sys: %s pc=0x%lux", excname(ur->vo, ur->pc), ur->pc); . 78a } . 77c if(vo < sizeof trapname/sizeof(char*)){ /* special case, and pc will be o.k. */ if(vo==4 && *(ushort*)pc==0x4848) return "breakpoint"; . 71c excname(unsigned vo, ulong pc) . ## diffname gnot/trap.c 1991/1114 ## diff -e /n/bootesdump/1991/1113/sys/src/9/gnot/trap.c /n/bootesdump/1991/1114/sys/src/9/gnot/trap.c 318c splhi(); if(r0!=FORK && (u->p->procctl || u->nnote)){ . 197a splx(s); . 156a s = spllo(); . 150c ulong s, sp; . ## diffname gnot/trap.c 1991/1115 ## diff -e /n/bootesdump/1991/1114/sys/src/9/gnot/trap.c /n/bootesdump/1991/1115/sys/src/9/gnot/trap.c 140,141d ## diffname gnot/trap.c 1991/1214 ## diff -e /n/bootesdump/1991/1115/sys/src/9/gnot/trap.c /n/bootesdump/1991/1214/sys/src/9/gnot/trap.c 329a return USTKTOP-BY2WD; /* address of user-level clock */ . 328a ulong *sp; sp = (ulong*)(USTKTOP - ssize); *--sp = nargs; ((Ureg*)UREGADDR)->usp = (ulong)sp; . 326,327c long execregs(ulong entry, ulong ssize, ulong nargs) . ## diffname gnot/trap.c 1991/1216 ## diff -e /n/bootesdump/1991/1214/sys/src/9/gnot/trap.c /n/bootesdump/1991/1216/sys/src/9/gnot/trap.c 246c qunlock(&u->p->debug); . 233c qunlock(&u->p->debug); . 226c qunlock(&u->p->debug); . 216c qunlock(&u->p->debug); . 214c qlock(&u->p->debug); . 196c qunlock(&u->p->debug); . 174c qunlock(&u->p->debug); . 162c qunlock(&u->p->debug); . 156c qlock(&u->p->debug); . ## diffname gnot/trap.c 1991/12171 ## diff -e /n/bootesdump/1991/1216/sys/src/9/gnot/trap.c /n/bootesdump/1991/12171/sys/src/9/gnot/trap.c 82a if(49<=vo && vo<=54) return fptrapname[vo-49]; . 69a char *fptrapname[]={ [49-49] "fp: inexact result", [50-49] "fp: divide by zero", [51-49] "fp: underflow", [52-49] "fp: operand error", [53-49] "fp: overflow", [54-49] "fp: signaling NaN", }; . 49c "fp: or cp: coprocessor protocol violation", . 43c "fp: trapcc or cp:trapcc instruction", . ## diffname gnot/trap.c 1991/1218 ## diff -e /n/bootesdump/1991/12171/sys/src/9/gnot/trap.c /n/bootesdump/1991/1218/sys/src/9/gnot/trap.c 174c pexit(n->msg, n->flag!=NDebug); . 171c pprint("suicide: %s\n", n->msg); . 169c n = &u->note[0]; if(strncmp(n->msg, "sys:", 4) == 0){ l = strlen(n->msg); if(l > ERRLEN-15) /* " pc=0x12345678\0" */ l = ERRLEN-15; sprint(n->msg+l, " pc=0x%.8lux", ur->pc); } if(n->flag!=NUser && (u->notified || u->notify==0)){ . 159a Note *n; . 158a int l; . 111c sprint(buf, "sys: %s", excname(ur->vo, ur->pc)); . 92,93c if(49<=vo && vo<=54){ sprint(buf, "fp: %s", fptrapname[vo-49]); return buf; } . 90c sprint(buf, "trap: %s", trapname[vo]); return buf; . 71,76c [49-49] "inexact result", [50-49] "divide by zero", [51-49] "underflow", [52-49] "operand error", [53-49] "overflow", [54-49] "signaling NaN", . 49c "coprocessor protocol violation", . 43c "trapcc instruction", . ## diffname gnot/trap.c 1992/0108 ## diff -e /n/bootesdump/1991/1218/sys/src/9/gnot/trap.c /n/bootesdump/1992/0108/sys/src/9/gnot/trap.c 220a return 1; . 168,169c if(u->nnote == 0) return 0; . 159c int . 10d ## diffname gnot/trap.c 1992/0111 ## diff -e /n/bootesdump/1992/0108/sys/src/9/gnot/trap.c /n/bootesdump/1992/0111/sys/src/9/gnot/trap.c 8c #include "../port/error.h" . ## diffname gnot/trap.c 1992/0120 ## diff -e /n/bootesdump/1992/0111/sys/src/9/gnot/trap.c /n/bootesdump/1992/0120/sys/src/9/gnot/trap.c 360a ulong userpc(void) { return ((Ureg*)UREGADDR)->pc; } . ## diffname gnot/trap.c 1992/0124 ## diff -e /n/bootesdump/1992/0120/sys/src/9/gnot/trap.c /n/bootesdump/1992/0124/sys/src/9/gnot/trap.c 220c return sent; . 189a sent = 1; . 186a sent = 0; . 161c int l, sent; . ## diffname gnot/trap.c 1992/0201 ## diff -e /n/bootesdump/1992/0124/sys/src/9/gnot/trap.c /n/bootesdump/1992/0201/sys/src/9/gnot/trap.c 325c pprint("odd sp in sys call pc %lux sp %lux\n", . ## diffname gnot/trap.c 1992/0321 ## diff -e /n/bootesdump/1992/0201/sys/src/9/gnot/trap.c /n/bootesdump/1992/0321/sys/src/9/gnot/trap.c 2c #include "../port/lib.h" . ## diffname gnot/trap.c 1992/0430 ## diff -e /n/bootesdump/1992/0321/sys/src/9/gnot/trap.c /n/bootesdump/1992/0430/sys/src/9/gnot/trap.c 344c if(r0!=RFORK && (u->p->procctl || u->nnote)){ . ## diffname gnot/trap.c 1992/0616 ## diff -e /n/bootesdump/1992/0430/sys/src/9/gnot/trap.c /n/bootesdump/1992/0616/sys/src/9/gnot/trap.c 254,256d 249c if(!okaddr(nur->pc, 1, 0) || !okaddr(nur->usp, BY2WD, 0)){ . 201,203d 196,197c if(!okaddr((ulong)u->notify, 1, 0) || !okaddr(sp-ERRLEN-3*BY2WD, sizeof(Ureg)+ERRLEN-3*BY2WD, 0)){ pprint("suicide: bad address in notify\n"); . ## diffname gnot/trap.c 1992/0625 ## diff -e /n/bootesdump/1992/0616/sys/src/9/gnot/trap.c /n/bootesdump/1992/0625/sys/src/9/gnot/trap.c 328c ret = (*systab[r0])(u->s.args); . 325,326c if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-sizeof(Sargs))) validaddr(sp, sizeof(Sargs), 0); u->s = *((Sargs*)(sp+BY2WD)); . 320,323c pprint("odd sp in sys call pc %lux sp %lux\n", ur->pc, ur->sp); postnote(u->p, 1, "sys: odd stack", NDebug); error(Ebadarg); . 318a . 313,316c pprint("bad sys call number %d pc %lux\n", r0, ur->pc); postnote(u->p, 1, "sys: bad sys call", NDebug); . 281d ## diffname gnot/trap.c 1992/06271 ## diff -e /n/bootesdump/1992/0625/sys/src/9/gnot/trap.c /n/bootesdump/1992/06271/sys/src/9/gnot/trap.c 340c if(u->scallnr!=RFORK && (u->p->procctl || u->nnote)){ . 337c if(u->scallnr == NOTED) /* ugly hack */ . 329c ret = (*systab[u->scallnr])(u->s.args); . 327c u->p->psstate = sysctab[u->scallnr]; . 311,312c if(u->scallnr >= sizeof systab/sizeof systab[0]){ pprint("bad sys call number %d pc %lux\n", u->scallnr, ur->pc); . 305c u->scallnr = ur->r0; . 279d ## diffname gnot/trap.c 1992/0701 ## diff -e /n/bootesdump/1992/06271/sys/src/9/gnot/trap.c /n/bootesdump/1992/0701/sys/src/9/gnot/trap.c 325c u->s = *((Sargs*)(sp+1*BY2WD)); . ## diffname gnot/trap.c 1992/0711 ## diff -e /n/bootesdump/1992/0701/sys/src/9/gnot/trap.c /n/bootesdump/1992/0711/sys/src/9/gnot/trap.c 276d ## diffname gnot/trap.c 1992/0714 ## diff -e /n/bootesdump/1992/0711/sys/src/9/gnot/trap.c /n/bootesdump/1992/0714/sys/src/9/gnot/trap.c 181c if(n->flag == NDebug) . ## diffname gnot/trap.c 1992/0805 ## diff -e /n/bootesdump/1992/0714/sys/src/9/gnot/trap.c /n/bootesdump/1992/0805/sys/src/9/gnot/trap.c 298d 286,296c /* must save FP registers before fork */ if(u->p->fpstate==FPactive && ur->r0==RFORK){ splhi(); procsave(u->p); spllo(); . 111c . 108,109c if(u) . ## diffname gnot/trap.c 1992/0806 ## diff -e /n/bootesdump/1992/0805/sys/src/9/gnot/trap.c /n/bootesdump/1992/0806/sys/src/9/gnot/trap.c 177c sprint(n->msg+l, " pc=0x%lux", ur->pc); . 111a splhi(); procsave(u->p); spllo(); . 93c fppc = 0; if(u) fppc = *(ulong*)(u->fpsave.reg+8); sprint(buf, "fp: %s fppc=0x%lux", fptrapname[vo-49], fppc); . 81a ulong fppc; . ## diffname gnot/trap.c 1992/0812 ## diff -e /n/bootesdump/1992/0806/sys/src/9/gnot/trap.c /n/bootesdump/1992/0812/sys/src/9/gnot/trap.c 124c exit(1); . ## diffname gnot/trap.c 1992/1027 ## diff -e /n/bootesdump/1992/0812/sys/src/9/gnot/trap.c /n/bootesdump/1992/1027/sys/src/9/gnot/trap.c 142a } print("\n"); . 137,141c if(u==0) return; i = 0; for(l=(ulong)&l; l