From 767ca6ed1abe02053be66c5b6d22cdc4834f67cd Mon Sep 17 00:00:00 2001 From: Marcel Moolenaar Date: Sat, 14 May 2011 14:55:15 +0000 Subject: [PATCH] Prefer switching the memory stack from user to kernel *before* switching the register stack. While the ordering doesn't matter, it creates an invariant not previously there: the memory stack pointer will always be larger than the register stack pointer. With this invariant in place, it's easier to add instrumentation code that detects a stack overflow because in such a scenario the memory stack pointer and register stack pointers have crossed each other. Aside: basic kernel operation needs about half the stack size (~16K) at most. We have plenty of head room on the kernel stack... --- sys/ia64/ia64/syscall.S | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/ia64/ia64/syscall.S b/sys/ia64/ia64/syscall.S index b35523a66be..ef559e8bce1 100644 --- a/sys/ia64/ia64/syscall.S +++ b/sys/ia64/ia64/syscall.S @@ -239,21 +239,22 @@ ENTRY_NOPROFILE(epc_syscall, 8) ;; } { .mmi - mov ar.bspstore=r15 + mov r13=ar.k4 add r30=-SIZEOF_TRAPFRAME,r14 mov r20=sp ;; } { .mii - mov r13=ar.k4 + mov r21=ar.unat dep r30=0,r30,0,10 ;; add sp=-16,r30 ;; } { .mmi + mov ar.bspstore=r15 + ;; mov ar.rnat=r19 - mov r21=ar.unat add r31=8,r30 ;; }