From f56d2fccc1a8789565beb1d864ec3c25cb2c33d3 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 2 Jan 1992 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1992-01-02 --- port/stip.c | 3 ++- power/dat.h | 1 + power/trap.c | 40 +++++++++++++++++++++------------------- ss/dat.h | 1 + ss/trap.c | 4 +++- 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/port/stip.c b/port/stip.c index ec381a3ce6b6b524782605c1120289cc80dfc602..a2dd323a7f1c58a89e073cfe0fa4c755a7fd8768 100644 --- a/port/stip.c +++ b/port/stip.c @@ -522,7 +522,8 @@ ipfragfree(Fragq *frag) { Fragq *fl, **l; - freeb(frag->blist); + if(frag->blist) + freeb(frag->blist); frag->src = 0; frag->id = 0; diff --git a/power/dat.h b/power/dat.h index 4d7839d68ee408c258857e18f2db01a4932f542b..225053d73dc39d0037163c1110802118f3334ba5 100644 --- a/power/dat.h +++ b/power/dat.h @@ -232,6 +232,7 @@ struct User void *ureg; /* User registers for notes */ void *dbgreg; /* User registers for debugging in proc */ ulong svstatus; + ulong svr1; /* * machine dependent User stuff */ diff --git a/power/trap.c b/power/trap.c index e177e022476875496cef3856a100b75f84bd9687..0c86ed21314821a7e1f9392147eeee99d1c8ac8f 100644 --- a/power/trap.c +++ b/power/trap.c @@ -26,24 +26,24 @@ void rfnote(Ureg**); char *excname[] = { - "external interrupt", - "TLB modification", - "TLB miss (load or fetch)", - "TLB miss (store)", - "address error (load or fetch)", - "address error (store)", - "bus error (fetch)", - "bus error (data load or store)", - "system call", + "trap: external interrupt", + "trap: TLB modification", + "trap: TLB miss (load or fetch)", + "trap: TLB miss (store)", + "trap: address error (load or fetch)", + "trap: address error (store)", + "trap: bus error (fetch)", + "trap: bus error (data load or store)", + "trap: system call", "breakpoint", - "reserved instruction", - "coprocessor unusable", - "arithmetic overflow", - "undefined 13", - "undefined 14", - "undefined 15", /* used as sys call for debugger */ + "trap: reserved instruction", + "trap: coprocessor unusable", + "trap: arithmetic overflow", + "trap: undefined 13", + "trap: undefined 14", + "trap: undefined 15", /* used as sys call for debugger */ /* the following is made up */ - "floating point exception" /* FPEXC */ + "trap: floating point exception" /* FPEXC */ }; char *fpexcname(ulong); @@ -152,7 +152,7 @@ trap(Ureg *ur) if(ecode == FPEXC) sprint(buf, "sys: fp: %s FCR31 %lux", fpexcname(x), x); else - sprint(buf, "sys: trap: %s", excname[ecode]); + sprint(buf, "sys: %s", excname[ecode]); postnote(u->p, 1, buf, NDebug); }else{ @@ -413,7 +413,7 @@ notify(Ureg *ur) memmove((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* */ + ur->r1 = (ulong)u->ureg; /* arg 1 is ureg* */ *(ulong*)(sp+0*BY2WD) = 0; /* arg 0 is pc */ ur->usp = sp; ur->pc = (ulong)u->notify; @@ -448,6 +448,7 @@ noted(Ureg **urp, ulong arg0) } u->notified = 0; memmove(*urp, u->ureg, sizeof(Ureg)); + (*urp)->r1 = u->svr1; switch(arg0){ case NCONT: if(waserror()){ @@ -542,8 +543,9 @@ syscall(Ureg *aur) noted(&aur, *(ulong*)(sp+BY2WD)); /* doesn't return */ splhi(); if(r1!=FORK && (u->p->procctl || u->nnote)){ - ur->r1 = ret; + u->svr1 = ret; notify(ur); + return ur->r1; } return ret; diff --git a/ss/dat.h b/ss/dat.h index d5b13b2fb8594d7d3549af4d82da22383afb490e..f7fa9dd6580191bd7a2690fcfef2b3d7bdca5629 100644 --- a/ss/dat.h +++ b/ss/dat.h @@ -177,6 +177,7 @@ struct User int (*notify)(void*, char*); void *ureg; void *dbgreg; /* User registers for debugging in proc */ + ulong svr7; }; /* diff --git a/ss/trap.c b/ss/trap.c index 4ca1849a90b5eb821557095b020ab6c1ca14fc6e..677b424b0edf31528df1ecdb514e1795e8dcb727 100644 --- a/ss/trap.c +++ b/ss/trap.c @@ -312,6 +312,7 @@ noted(Ureg **urp, ulong arg0) } u->notified = 0; memmove(*urp, u->ureg, sizeof(Ureg)); + (*urp)->r7 = u->svr7; switch(arg0){ case NCONT: if(waserror()){ @@ -406,8 +407,9 @@ syscall(Ureg *aur) splhi(); if(r7!=FORK && (u->p->procctl || u->nnote)){ - ur->r7 = ret; + u->svr7 = ret; notify(ur); + return ur->r7; } return ret; }