diff options
| -rw-r--r-- | sys/src/9/pc64/mem.h | 5 | ||||
| -rw-r--r-- | sys/src/9/pc64/trap.c | 1 |
2 files changed, 4 insertions, 2 deletions
diff --git a/sys/src/9/pc64/mem.h b/sys/src/9/pc64/mem.h index 73fbcfc93..9003863ca 100644 --- a/sys/src/9/pc64/mem.h +++ b/sys/src/9/pc64/mem.h @@ -44,9 +44,10 @@ * Address spaces. User: */ #define UTZERO (0x0000000000200000ull) /* first address in user text */ +#define UADDRMASK (0x00007fffffffffffull) /* canonical address mask */ #define TSTKTOP (0x00007ffffffff000ull) -#define USTKSIZE (16*MiB) /* size of user stack */ -#define USTKTOP (TSTKTOP-USTKSIZE) /* end of new stack in sysexec */ +#define USTKSIZE (16*MiB) /* size of user stack */ +#define USTKTOP (TSTKTOP-USTKSIZE) /* end of new stack in sysexec */ /* * Address spaces. Kernel, sorted by address. diff --git a/sys/src/9/pc64/trap.c b/sys/src/9/pc64/trap.c index 41a8c4978..6b2154c3f 100644 --- a/sys/src/9/pc64/trap.c +++ b/sys/src/9/pc64/trap.c @@ -992,6 +992,7 @@ setregisters(Ureg* ureg, char* pureg, char* uva, int n) if(ureg->gs != UDSEL) ureg->gs = 0; ureg->flags = (ureg->flags & 0x00ff) | (flags & 0xff00); + ureg->pc &= UADDRMASK; } static void |
