Author: marcel
Date: Sat May 14 14:55:15 2011
New Revision: 221894
URL: http://svn.freebsd.org/changeset/base/221894

Log:
  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...

Modified:
  head/sys/ia64/ia64/syscall.S

Modified: head/sys/ia64/ia64/syscall.S
==============================================================================
--- head/sys/ia64/ia64/syscall.S        Sat May 14 14:47:19 2011        
(r221893)
+++ head/sys/ia64/ia64/syscall.S        Sat May 14 14:55:15 2011        
(r221894)
@@ -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
        ;;
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to