diff options
| -rw-r--r-- | sys/src/9/pc64/l.s | 28 | ||||
| -rw-r--r-- | sys/src/9/pc64/trap.c | 41 |
2 files changed, 18 insertions, 51 deletions
diff --git a/sys/src/9/pc64/l.s b/sys/src/9/pc64/l.s index fe3de017b..996204897 100644 --- a/sys/src/9/pc64/l.s +++ b/sys/src/9/pc64/l.s @@ -687,14 +687,6 @@ TEXT touser(SB), 1, $-4 CLI SWAPGS - MOVW $UDSEL, AX - MOVW AX, DS - MOVW AX, ES - - MOVW $NULLSEL, AX - MOVW AX, FS - MOVW AX, GS - MOVL $0, RMACH MOVL $0, RUSER @@ -719,14 +711,8 @@ TEXT syscallentry(SB), 1, $-4 PUSHQ R11 /* old flags */ PUSHQ $UESEL /* old code segment */ PUSHQ CX /* old ip */ - SUBQ $(16+16*8), SP /* unsaved registers */ - MOVW $UDSEL, (15*8+0)(SP) - MOVW ES, (15*8+2)(SP) - MOVW FS, (15*8+4)(SP) - MOVW GS, (15*8+6)(SP) - MOVQ RMACH, (14*8)(SP) MOVQ RUSER, (13*8)(SP) @@ -746,11 +732,6 @@ TEXT forkret(SB), 1, $-4 CLI SWAPGS - MOVW 22(SP), GS - MOVW 20(SP), FS - MOVW 18(SP), ES - MOVW 16(SP), DS - MOVQ 8(SP), RMACH MOVQ 0(SP), RUSER @@ -785,10 +766,6 @@ _intrcommon: MOVQ RUSER, 0(SP) MOVQ RMACH, 8(SP) - MOVW DS, 16(SP) - MOVW ES, 18(SP) - MOVW FS, 20(SP) - MOVW GS, 22(SP) SWAPGS BYTE $0x65; MOVQ 0, RMACH /* m-> (MOVQ GS:0x0, R15) */ @@ -834,10 +811,7 @@ _intrestore: JEQ _iretnested SWAPGS - MOVW 22(SP), GS - MOVW 20(SP), FS - MOVW 18(SP), ES - MOVW 16(SP), DS + MOVQ 8(SP), RMACH MOVQ 0(SP), RUSER diff --git a/sys/src/9/pc64/trap.c b/sys/src/9/pc64/trap.c index 6f6f95f96..a88f41b93 100644 --- a/sys/src/9/pc64/trap.c +++ b/sys/src/9/pc64/trap.c @@ -476,21 +476,19 @@ dumpregs(Ureg* ureg) else iprint("cpu%d: registers for kernel\n", m->machno); - iprint(" DS %.4uX AX %.16lluX BX %.16lluX CX %.16lluX\n", - ureg->ds, ureg->ax, ureg->bx, ureg->cx); - iprint(" ES %.4uX DX %.16lluX SI %.16lluX DI %.16lluX\n", - ureg->es, ureg->dx, ureg->si, ureg->di); - iprint(" FS %.4uX BP %.16lluX R8 %.16lluX R9 %.16lluX\n", - ureg->fs, ureg->bp, ureg->r8, ureg->r9); - iprint(" GS %.4uX R10 %.16lluX R11 %.16lluX R12 %.16lluX\n", - ureg->gs, ureg->r10, ureg->r11, ureg->r12); - - iprint(" SS %.4lluX R13 %.16lluX R14 %.16lluX R15 %.16lluX\n", - ureg->ss & 0xffff, ureg->r13, ureg->r14, ureg->r15); - iprint(" CS %.4lluX PC %.16lluX SP %.16lluX\n", - ureg->cs & 0xffff, ureg->pc, ureg->sp); - - iprint("TYPE %.2lluX ERROR %.4lluX FLAGS %.8lluX\n", + iprint(" AX %.16lluX BX %.16lluX CX %.16lluX\n", + ureg->ax, ureg->bx, ureg->cx); + iprint(" DX %.16lluX SI %.16lluX DI %.16lluX\n", + ureg->dx, ureg->si, ureg->di); + iprint(" BP %.16lluX R8 %.16lluX R9 %.16lluX\n", + ureg->bp, ureg->r8, ureg->r9); + iprint(" R10 %.16lluX R11 %.16lluX R12 %.16lluX\n", + ureg->r10, ureg->r11, ureg->r12); + iprint(" R13 %.16lluX R14 %.16lluX R15 %.16lluX\n", + ureg->r13, ureg->r14, ureg->r15); + iprint(" CS %.4lluX SS %.4lluX PC %.16lluX SP %.16lluX\n", + ureg->cs & 0xffff, ureg->ss & 0xffff, ureg->pc, ureg->sp); + iprint("TYPE %.2lluX ERROR %.4lluX FLAGS %.8lluX\n", ureg->type & 0xff, ureg->error & 0xffff, ureg->flags & 0xffffffff); /* @@ -507,7 +505,7 @@ dumpregs(Ureg* ureg) if(ureg->type == 18) dumpmcregs(); } - iprint("\n ur %#p up %#p\n", ureg, up); + iprint(" ur %#p up %#p\n", ureg, up); } @@ -854,7 +852,7 @@ if(0) print("%s %lud: notify %#p %#p %#p %s\n", ureg->pc = (uintptr)up->notify; ureg->bp = (uintptr)up->ureg; /* arg1 passed in RARG */ ureg->cs = UESEL; - ureg->ss = ureg->ds = ureg->es = UDSEL; + ureg->ss = UDSEL; up->notified = 1; up->nnote--; memmove(&up->lastnote, &up->note[0], sizeof(Note)); @@ -952,8 +950,7 @@ execregs(uintptr entry, ulong ssize, ulong nargs) ureg->sp = (uintptr)sp; ureg->pc = entry; ureg->cs = UESEL; - ureg->ss = ureg->ds = ureg->es = UDSEL; - ureg->fs = ureg->gs = NULLSEL; + ureg->ss = UDSEL; ureg->r14 = ureg->r15 = 0; /* extern user registers */ return (uintptr)USTKTOP-sizeof(Tos); /* address of kernel/user shared data */ } @@ -981,11 +978,7 @@ setregisters(Ureg* ureg, char* pureg, char* uva, int n) flags = ureg->flags; memmove(pureg, uva, n); ureg->cs = UESEL; - ureg->ss = ureg->ds = ureg->es = UDSEL; - if(ureg->fs != UDSEL) - ureg->fs = NULLSEL; - if(ureg->gs != UDSEL) - ureg->gs = NULLSEL; + ureg->ss = UDSEL; ureg->flags = (ureg->flags & 0x00ff) | (flags & 0xff00); ureg->pc &= UADDRMASK; } |
