summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/pc64/mem.h5
-rw-r--r--sys/src/9/pc64/trap.c1
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