[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [Mini-OS] Fix x86 initial stack alignment



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1195834933 0
# Node ID 75cb82d277bed86861e125f402e991961cd2581f
# Parent  2e05a6173be03cfff6009bcb58d8b5ec0a5e399c
[Mini-OS] Fix x86 initial stack alignment

This fixes the initial stack alignment for x86, which is required for
current to return a fine NULL instead of a random value or possibly
crash during initialization.

Signed-off-by: Grzegorz Milos <gm281@xxxxxxxxx>
Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxx>
---
 extras/mini-os/arch/x86/setup.c  |    4 ++--
 extras/mini-os/arch/x86/x86_32.S |    3 ++-
 extras/mini-os/arch/x86/x86_64.S |    3 ++-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff -r 2e05a6173be0 -r 75cb82d277be extras/mini-os/arch/x86/setup.c
--- a/extras/mini-os/arch/x86/setup.c   Fri Nov 23 11:58:11 2007 +0000
+++ b/extras/mini-os/arch/x86/setup.c   Fri Nov 23 16:22:13 2007 +0000
@@ -45,7 +45,7 @@ union start_info_union start_info_union;
  * Just allocate the kernel stack here. SS:ESP is set up to point here
  * in head.S.
  */
-char stack[8192];
+char stack[2*8192];
 
 extern char shared_info[PAGE_SIZE];
 
@@ -102,7 +102,7 @@ void
 void
 arch_print_info(void)
 {
-       printk("  stack:      %p-%p\n", stack, stack + 8192);
+       printk("  stack:      %p-%p\n", stack, stack + 2*8192);
 }
 
 
diff -r 2e05a6173be0 -r 75cb82d277be extras/mini-os/arch/x86/x86_32.S
--- a/extras/mini-os/arch/x86/x86_32.S  Fri Nov 23 11:58:11 2007 +0000
+++ b/extras/mini-os/arch/x86/x86_32.S  Fri Nov 23 16:22:13 2007 +0000
@@ -21,11 +21,12 @@ _start:
 _start:
         cld
         lss stack_start,%esp
+        andl $(~(8192-1)), %esp
         push %esi 
         call start_kernel
 
 stack_start:
-       .long stack+8192, __KERNEL_SS
+       .long stack+(2*8192), __KERNEL_SS
 
         /* Unpleasant -- the PTE that maps this page is actually overwritten */
         /* to map the real shared-info page! :-)                             */
diff -r 2e05a6173be0 -r 75cb82d277be extras/mini-os/arch/x86/x86_64.S
--- a/extras/mini-os/arch/x86/x86_64.S  Fri Nov 23 11:58:11 2007 +0000
+++ b/extras/mini-os/arch/x86/x86_64.S  Fri Nov 23 16:22:13 2007 +0000
@@ -18,11 +18,12 @@ _start:
 _start:
         cld
         movq stack_start(%rip),%rsp
+        andq $(~(8192-1)), %rsp
         movq %rsi,%rdi
         call start_kernel
 
 stack_start:
-        .quad stack+8192
+        .quad stack+(2*8192)
 
         /* Unpleasant -- the PTE that maps this page is actually overwritten */
         /* to map the real shared-info page! :-)                             */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.