@@ 512,7 512,6 @@ notify(Ureg *ur)
if(n->flag != NUser && (up->notified || up->notify==0)) {
if(n->flag == NDebug)
pprint("suicide: %s\n", n->msg);
-
qunlock(&up->debug);
pexit(n->msg, n->flag!=NDebug);
}
@@ 531,7 530,7 @@ notify(Ureg *ur)
sp -= sizeof(Ureg);
if(!okaddr((ulong)up->notify, BY2WD, 0) ||
- !okaddr(sp-ERRLEN-4*BY2WD, sizeof(Ureg)+ERRLEN-4*BY2WD, 1)) {
+ !okaddr(sp-ERRLEN-4*BY2WD, sizeof(Ureg)+ERRLEN+4*BY2WD, 1)) {
pprint("suicide: bad address or sp in notify\n");
qunlock(&up->debug);
pexit("Suicide", 0);
@@ 601,7 600,7 @@ noted(Ureg *kur, Ureg **urp, ulong arg0)
pexit("Suicide", 0);
}
- oureg = (ulong)up->ureg;
+ oureg = (ulong)nur;
if(oureg){
if(oureg>=USTKTOP || oureg<USTKTOP-USTKSIZE
|| (oureg & (BY2V-1))
@@ 637,7 636,7 @@ noted(Ureg *kur, Ureg **urp, ulong arg0)
sp = oureg-4*BY2WD-ERRLEN;
splhi();
(*urp)->sp = sp;
- ((ulong*)sp)[1] = (ulong)up->ureg; /* arg 1 0(FP) is ureg* */
+ ((ulong*)sp)[1] = oureg; /* arg 1 0(FP) is ureg* */
((ulong*)sp)[0] = 0; /* arg 0 is pc */
(*urp)->r1 = oureg; /* arg 1 is ureg* */
(*urp)->hr1 = 0;