]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
legacy-like stack handling
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 13 Dec 2009 17:10:53 +0000 (18:10 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 13 Dec 2009 17:10:53 +0000 (18:10 +0100)
loader/i386/multiboot.c

index 33c7433f2e54092a7ed56014547bea20640ad95b..f5036a2ae575cf41d5d93a5645cec93b946a0ef5 100644 (file)
@@ -59,7 +59,6 @@ char *grub_multiboot_payload_orig;
 grub_addr_t grub_multiboot_payload_dest;
 grub_size_t grub_multiboot_payload_size;
 grub_uint32_t grub_multiboot_payload_eip;
-grub_uint32_t grub_multiboot_payload_esp;
 
 static grub_err_t
 grub_multiboot_boot (void)
@@ -71,7 +70,9 @@ grub_multiboot_boot (void)
       .ecx = 0,
       .edx = 0,
       .eip = grub_multiboot_payload_eip,
-      .esp = grub_multiboot_payload_esp
+      /* Set esp to some random location in low memory to avoid breaking
+        non-compliant kernels.  */
+      .esp = 0x7ff00
     };
 
   grub_relocator32_boot (grub_multiboot_payload_orig,
@@ -290,13 +291,11 @@ grub_multiboot (int argc, char *argv[])
                                ((void *) ((x) + code_size + cmdline_length))
 #define mbi_addr(x)            ((void *) ((x) + code_size + cmdline_length + boot_loader_name_length))
 #define mmap_addr(x)           ((void *) ((x) + code_size + cmdline_length + boot_loader_name_length + sizeof (struct multiboot_info)))
-#define stack_addr(x)          ((void *) ((x) + code_size + cmdline_length + boot_loader_name_length + sizeof (struct multiboot_info) + mmap_length + GRUB_MULTIBOOT_STACK_SIZE))
 
   grub_multiboot_payload_size = cmdline_length
     /* boot_loader_name_length might need to grow for mbi,etc to be aligned (see below) */
     + boot_loader_name_length + 3
-    + sizeof (struct multiboot_info) + mmap_length
-    + GRUB_MULTIBOOT_STACK_SIZE;
+    + sizeof (struct multiboot_info) + mmap_length;
 
   if (header->flags & MULTIBOOT_AOUT_KLUDGE)
     {
@@ -319,7 +318,7 @@ grub_multiboot (int argc, char *argv[])
       if (! grub_multiboot_payload_orig)
        goto fail;
 
-      if ((grub_file_seek (file, offset)) == (grub_off_t) - 1)
+      if ((grub_file_seek (file, offset)) == (grub_off_t) -1)
        goto fail;
 
       grub_file_read (file, (void *) grub_multiboot_payload_orig, load_size);
@@ -382,8 +381,6 @@ grub_multiboot (int argc, char *argv[])
   if (grub_multiboot_get_bootdev (&mbi->boot_device))
     mbi->flags |= MULTIBOOT_INFO_BOOTDEV;
 
-  grub_multiboot_payload_esp = PTR_TO_UINT32 (stack_addr (grub_multiboot_payload_dest));
-
   grub_loader_set (grub_multiboot_boot, grub_multiboot_unload, 1);
 
  fail: