]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Don't assume that beginning address is also the entry point on ppc.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 12 Jun 2012 23:15:15 +0000 (01:15 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 12 Jun 2012 23:15:15 +0000 (01:15 +0200)
* grub-core/loader/powerpc/ieee1275/linux.c (linux_entry): New variable.
(grub_linux_boot): Use linux_entry.
(grub_linux_load32): Fill linux_entry. Fix setting linux_addr.
(grub_linux_load64): Likewise.

ChangeLog
grub-core/loader/powerpc/ieee1275/linux.c

index 1f9107af0c2068bdc26be33063e1e18a1a3865e2..faab5c5003f0c61fa42ec780498e576ccf49b082 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-06-13  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Don't assume that beginning address is also the entry point on ppc.
+
+       * grub-core/loader/powerpc/ieee1275/linux.c (linux_entry): New variable.
+       (grub_linux_boot): Use linux_entry.
+       (grub_linux_load32): Fill linux_entry. Fix setting linux_addr.
+       (grub_linux_load64): Likewise.
+
 2012-06-13  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * util/grub-install.in: Fix cross-disk check on non-PreP machines.
index a1abc2a8e4310d2c35a35170e705b4661f168603..70e288cfb332c29a750783f142f19810c256c73c 100644 (file)
@@ -43,6 +43,7 @@ static grub_addr_t initrd_addr;
 static grub_size_t initrd_size;
 
 static grub_addr_t linux_addr;
+static grub_addr_t linux_entry;
 static grub_size_t linux_size;
 
 static char *linux_args;
@@ -108,14 +109,14 @@ grub_linux_boot (void)
   grub_ieee1275_set_property (grub_ieee1275_chosen, "bootargs", linux_args,
                              grub_strlen (linux_args) + 1, &actual);
 
-  grub_dprintf ("loader", "Entry point: 0x%x\n", linux_addr);
+  grub_dprintf ("loader", "Entry point: 0x%x\n", linux_entry);
   grub_dprintf ("loader", "Initrd at: 0x%x, size 0x%x\n", initrd_addr,
                initrd_size);
   grub_dprintf ("loader", "Boot arguments: %s\n", linux_args);
   grub_dprintf ("loader", "Jumping to Linux...\n");
 
   /* Boot the kernel.  */
-  linuxmain = (kernel_entry_t) linux_addr;
+  linuxmain = (kernel_entry_t) linux_entry;
   linuxmain ((void *) initrd_addr, initrd_size, grub_ieee1275_entry_fn, 0, 0);
 
   return GRUB_ERR_NONE;
@@ -181,7 +182,8 @@ grub_linux_load32 (grub_elf_t elf, const char *filename)
   if (seg_addr == (grub_addr_t) -1)
     return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't claim memory");
 
-  linux_addr = seg_addr + offset;
+  linux_entry = seg_addr + offset;
+  linux_addr = seg_addr;
 
   /* Now load the segments into the area we claimed.  */
   auto grub_err_t offset_phdr (Elf32_Phdr *phdr, grub_addr_t *addr, int *do_load);
@@ -227,7 +229,8 @@ grub_linux_load64 (grub_elf_t elf, const char *filename)
   if (seg_addr == (grub_addr_t) -1)
     return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't claim memory");
 
-  linux_addr = seg_addr + offset;
+  linux_entry = seg_addr + offset;
+  linux_addr = seg_addr;
 
   /* Now load the segments into the area we claimed.  */
   auto grub_err_t offset_phdr (Elf64_Phdr *phdr, grub_addr_t *addr, int *do_load);