Skip to contentSkip to conversation

Fix x86 initial stack alignment

PATCH New Samuel Thibault 1 participant 1 message Nov 23, 2007 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

PATCH 1/1 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.

extras/mini-os/arch/x86/setup.c +2 -2
diff -r 2e05a6173be0 extras/mini-os/arch/x86/setup.c
@@ -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);
 }
 
 
extras/mini-os/arch/x86/x86_32.S +2 -1
diff -r 2e05a6173be0 extras/mini-os/arch/x86/x86_32.S
@@ -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! :-)                             */
extras/mini-os/arch/x86/x86_64.S +2 -1
diff -r 2e05a6173be0 extras/mini-os/arch/x86/x86_64.S
@@ -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! :-)                             */