remove union from 386 and mips ureg Reference: /n/atom/patch/applied/mips386ureg Date: Fri May 9 18:37:14 CES 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/9/rb/trap.c Fri May 9 18:37:14 2014 +++ /sys/src/9/rb/trap.c Fri May 9 18:37:14 2014 @@ -676,7 +676,7 @@ qunlock(&up->debug); pexit(n->msg, n->flag!=NDebug); } - sp = ur->usp & ~(BY2V-1); + sp = ur->sp & ~(BY2V-1); sp -= sizeof(Ureg); if(!okaddr((ulong)up->notify, BY2WD, 0) || @@ -698,7 +698,7 @@ ur->r1 = (long)up->ureg; /* arg 1 is ureg* */ ((ulong*)sp)[1] = (ulong)up->ureg; /* arg 1 0(FP) is ureg* */ ((ulong*)sp)[0] = 0; /* arg 0 is pc */ - ur->usp = sp; + ur->sp = sp; /* * arrange to resume at user's handler as if handler(ureg, errstr) * were being called. @@ -770,7 +770,7 @@ switch(arg0) { case NCONT: case NRSTR: /* only used by APE */ - if(!okaddr(nur->pc, BY2WD, 0) || !okaddr(nur->usp, BY2WD, 0)){ + if(!okaddr(nur->pc, BY2WD, 0) || !okaddr(nur->sp, BY2WD, 0)){ pprint("suicide: trap in noted\n"); qunlock(&up->debug); pexit("Suicide", 0); @@ -787,7 +787,7 @@ break; case NSAVE: /* only used by APE */ - if(!okaddr(nur->pc, BY2WD, 0) || !okaddr(nur->usp, BY2WD, 0)){ + if(!okaddr(nur->pc, BY2WD, 0) || !okaddr(nur->sp, BY2WD, 0)){ pprint("suicide: trap in noted\n"); qunlock(&up->debug); pexit("Suicide", 0); @@ -1016,7 +1016,7 @@ *--sp = nargs; ur = (Ureg*)up->dbgreg; - ur->usp = (ulong)sp; + ur->sp = PTR2UINT(sp); ur->pc = entry - 4; /* syscall advances it */ up->fpsave.fpstatus = initfp.fpstatus; return USTKTOP-sizeof(Tos); /* address of kernel/user shared data */ --- /sys/src/9/pc/trap.c Fri May 9 18:37:14 2014 +++ /sys/src/9/pc/trap.c Fri May 9 18:37:14 2014 @@ -259,7 +259,7 @@ "alignment check", "machine check", "SIMD exception", - "20 (reserved)", + "virtulization exception", "21 (reserved)", "22 (reserved)", "23 (reserved)", @@ -480,7 +480,7 @@ iprint("cpu%d: registers for kernel\n", m->machno); iprint("FLAGS=%luX TRAP=%luX ECODE=%luX PC=%luX", ureg->flags, ureg->trap, ureg->ecode, ureg->pc); - iprint(" SS=%4.4luX USP=%luX\n", ureg->ss & 0xFFFF, ureg->usp); + iprint(" SS=%4.4luX USP=%luX\n", ureg->ss & 0xFFFF, ureg->sp); iprint(" AX %8.8luX BX %8.8luX CX %8.8luX DX %8.8luX\n", ureg->ax, ureg->bx, ureg->cx, ureg->dx); iprint(" SI %8.8luX DI %8.8luX BP %8.8luX\n", @@ -527,7 +527,7 @@ { Ureg ureg; ureg.pc = getcallerpc(&fn); - ureg.sp = (ulong)&fn; + ureg.sp = PTR2UINT(&fn); fn(&ureg); } @@ -697,7 +697,7 @@ up->pc = ureg->pc; up->dbgreg = ureg; - sp = ureg->usp; + sp = ureg->sp; scallnr = ureg->ax; up->scallnr = scallnr; @@ -851,11 +851,11 @@ qunlock(&up->debug); pexit(n->msg, n->flag!=NDebug); } - sp = ureg->usp; + sp = ureg->sp; sp -= 256; /* debugging: preserve context causing problem */ sp -= sizeof(Ureg); if(0) print("%s %lud: notify %.8lux %.8lux %.8lux %s\n", - up->text, up->pid, ureg->pc, ureg->usp, sp, n->msg); + up->text, up->pid, ureg->pc, ureg->sp, sp, n->msg); if(!okaddr((ulong)up->notify, 1, 0) || !okaddr(sp-ERRMAX-4*BY2WD, sizeof(Ureg)+ERRMAX+4*BY2WD, 1)){ @@ -873,8 +873,8 @@ *(ulong*)(sp+2*BY2WD) = sp+3*BY2WD; /* arg 2 is string */ *(ulong*)(sp+1*BY2WD) = (ulong)up->ureg; /* arg 1 is ureg* */ *(ulong*)(sp+0*BY2WD) = 0; /* arg 0 is pc */ - ureg->usp = sp; - ureg->pc = (ulong)up->notify; + ureg->sp = sp; + ureg->pc = PTR2UINT(up->notify); up->notified = 1; up->nnote--; memmove(&up->lastnote, &up->note[0], sizeof(Note)); @@ -939,8 +939,8 @@ case NCONT: case NRSTR: if(0) print("%s %lud: noted %.8lux %.8lux\n", - up->text, up->pid, nureg->pc, nureg->usp); - if(!okaddr(nureg->pc, 1, 0) || !okaddr(nureg->usp, BY2WD, 0)){ + up->text, up->pid, nureg->pc, nureg->sp); + if(!okaddr(nureg->pc, 1, 0) || !okaddr(nureg->sp, BY2WD, 0)){ qunlock(&up->debug); pprint("suicide: trap in noted\n"); pexit("Suicide", 0); @@ -951,7 +951,7 @@ case NSAVE: if(!okaddr(nureg->pc, BY2WD, 0) - || !okaddr(nureg->usp, BY2WD, 0)){ + || !okaddr(nureg->sp, BY2WD, 0)){ qunlock(&up->debug); pprint("suicide: trap in noted\n"); pexit("Suicide", 0); @@ -993,7 +993,7 @@ *--sp = nargs; ureg = up->dbgreg; - ureg->usp = (ulong)sp; + ureg->sp = PTR2UINT(sp); ureg->pc = entry; return USTKTOP-sizeof(Tos); /* address of kernel/user shared data */ } --- /sys/src/9/pcpae/trap.c Fri May 9 18:37:14 2014 +++ /sys/src/9/pcpae/trap.c Fri May 9 18:37:14 2014 @@ -480,7 +480,7 @@ iprint("cpu%d: registers for kernel\n", m->machno); iprint("FLAGS=%luX TRAP=%luX ECODE=%luX PC=%luX", ureg->flags, ureg->trap, ureg->ecode, ureg->pc); - iprint(" SS=%4.4luX USP=%luX\n", ureg->ss & 0xFFFF, ureg->usp); + iprint(" SS=%4.4luX USP=%luX\n", ureg->ss & 0xFFFF, ureg->sp); iprint(" AX %8.8luX BX %8.8luX CX %8.8luX DX %8.8luX\n", ureg->ax, ureg->bx, ureg->cx, ureg->dx); iprint(" SI %8.8luX DI %8.8luX BP %8.8luX\n", @@ -504,10 +504,10 @@ * CR4. If there is a CR4 and machine check extensions, read the machine * check address and machine check type registers if RDMSR supported. */ - iprint(" CR0 %8.8ux CR2 %8.8ux CR3 %8.8ux", + iprint(" CR0 %.8ux CR2 %.8ux CR3 %.8ux", getcr0(), getcr2(), getcr3()); if(m->cpuiddx & (Mce|Tsc|Pse|Vmex)){ - iprint(" CR4 %8.8ux", getcr4()); + iprint(" CR4 %.8ux", getcr4()); if((m->cpuiddx & (Mce|Cpumsr)) == (Mce|Cpumsr)){ rdmsr(0x00, &mca); rdmsr(0x01, &mct); @@ -527,7 +527,7 @@ { Ureg ureg; ureg.pc = getcallerpc(&fn); - ureg.sp = (ulong)&fn; + ureg.sp = PTR2UINT(&fn); fn(&ureg); } @@ -697,7 +697,7 @@ up->pc = ureg->pc; up->dbgreg = ureg; - sp = ureg->usp; + sp = ureg->sp; scallnr = ureg->ax; up->scallnr = scallnr; @@ -851,11 +851,11 @@ qunlock(&up->debug); pexit(n->msg, n->flag!=NDebug); } - sp = ureg->usp; + sp = ureg->sp; sp -= 256; /* debugging: preserve context causing problem */ sp -= sizeof(Ureg); if(0) print("%s %lud: notify %.8lux %.8lux %.8lux %s\n", - up->text, up->pid, ureg->pc, ureg->usp, sp, n->msg); + up->text, up->pid, ureg->pc, ureg->sp, sp, n->msg); if(!okaddr((ulong)up->notify, 1, 0) || !okaddr(sp-ERRMAX-4*BY2WD, sizeof(Ureg)+ERRMAX+4*BY2WD, 1)){ @@ -873,8 +873,8 @@ *(ulong*)(sp+2*BY2WD) = sp+3*BY2WD; /* arg 2 is string */ *(ulong*)(sp+1*BY2WD) = (ulong)up->ureg; /* arg 1 is ureg* */ *(ulong*)(sp+0*BY2WD) = 0; /* arg 0 is pc */ - ureg->usp = sp; - ureg->pc = (ulong)up->notify; + ureg->sp = sp; + ureg->pc = PTR2UINT(up->notify); up->notified = 1; up->nnote--; memmove(&up->lastnote, &up->note[0], sizeof(Note)); @@ -939,8 +939,8 @@ case NCONT: case NRSTR: if(0) print("%s %lud: noted %.8lux %.8lux\n", - up->text, up->pid, nureg->pc, nureg->usp); - if(!okaddr(nureg->pc, 1, 0) || !okaddr(nureg->usp, BY2WD, 0)){ + up->text, up->pid, nureg->pc, nureg->sp); + if(!okaddr(nureg->pc, 1, 0) || !okaddr(nureg->sp, BY2WD, 0)){ qunlock(&up->debug); pprint("suicide: trap in noted\n"); pexit("Suicide", 0); @@ -951,7 +951,7 @@ case NSAVE: if(!okaddr(nureg->pc, BY2WD, 0) - || !okaddr(nureg->usp, BY2WD, 0)){ + || !okaddr(nureg->sp, BY2WD, 0)){ qunlock(&up->debug); pprint("suicide: trap in noted\n"); pexit("Suicide", 0); @@ -993,7 +993,7 @@ *--sp = nargs; ureg = up->dbgreg; - ureg->usp = (ulong)sp; + ureg->sp = PTR2UINT(sp); ureg->pc = entry; return USTKTOP-sizeof(Tos); /* address of kernel/user shared data */ } --- /mips/include/ureg.h Fri May 9 18:37:14 2014 +++ /mips/include/ureg.h Fri May 9 18:37:14 2014 @@ -2,10 +2,7 @@ { ulong status; ulong pc; - union{ - ulong sp; /* r29 */ - ulong usp; /* r29 */ - }; + ulong sp; /* r29 */ ulong cause; ulong badvaddr; ulong tlbvirt; --- /386/include/ureg.h Fri May 9 18:37:14 2014 +++ /386/include/ureg.h Fri May 9 18:37:14 2014 @@ -17,9 +17,6 @@ ulong pc; /* pc */ ulong cs; /* old context */ ulong flags; /* old flags */ - union { - ulong usp; - ulong sp; - }; + ulong sp; ulong ss; /* old stack segment */ };