bug-grub
[Top][All Lists]
Advanced

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

patch to handle different lma and vma


From: Rogelio M. Serrano Jr.
Subject: patch to handle different lma and vma
Date: Tue, 3 Apr 2001 19:09:07 +0800 (PHT)


diff -ur grub-0.5.96.1.orig/stage2/boot.c grub-0.5.96.1/stage2/boot.c
--- grub-0.5.96.1.orig/stage2/boot.c    Mon Oct 16 22:42:08 2000
+++ grub-0.5.96.1/stage2/boot.c Tue Apr  3 18:28:59 2001
@@ -29,7 +29,8 @@
 static int cur_addr;
 entry_func entry_addr;
 static struct mod_list mll[99];
-
+unsigned int lma;
+unsigned int vma;
 
 /*
  *  The next two functions, 'load_image' and 'load_module', are the building
@@ -107,7 +108,7 @@
       else
        entry_addr = (entry_func) (pu.elf->e_entry & 0xFFFFFF);
 
-      if (((int) entry_addr) < 0x100000)
+      if ((entry_addr) < (entry_func)0x100000)
        errnum = ERR_BELOW_1MB;
 
       /* don't want to deal with ELF program header at some random
@@ -519,6 +520,13 @@
              memsiz = phdr->p_memsz;
              if (memaddr < RAW_ADDR (0x100000))
                errnum = ERR_BELOW_1MB;
+              // p_addr and v_addr of the first program segment are the 
+              // physical base address and 
+              // virtual base address respectively
+              if (!loaded) {
+                 lma = RAW_ADDR (phdr->p_paddr); 
+                 vma = RAW_ADDR (phdr->p_vaddr); 
+              }
              /* make sure we only load what we're supposed to! */
              if (filesiz > memsiz)
                filesiz = memsiz;
diff -ur grub-0.5.96.1.orig/stage2/builtins.c grub-0.5.96.1/stage2/builtins.c
--- grub-0.5.96.1.orig/stage2/builtins.c        Fri Oct 20 03:50:00 2000
+++ grub-0.5.96.1/stage2/builtins.c     Tue Apr  3 18:32:19 2001
@@ -290,7 +290,7 @@
 
     case KERNEL_TYPE_MULTIBOOT:
       /* Multiboot */
-      multi_boot ((int) entry_addr, (int) &mbi);
+      multi_boot ((lma + (unsigned int)entry_addr - vma), (int) &mbi);
       break;
 
     default:
diff -ur grub-0.5.96.1.orig/stage2/shared.h grub-0.5.96.1/stage2/shared.h
--- grub-0.5.96.1.orig/stage2/shared.h  Thu Oct 19 23:27:52 2000
+++ grub-0.5.96.1/stage2/shared.h       Tue Apr  3 18:26:13 2001
@@ -463,6 +463,8 @@
   MAX_ERR_NUM
 } grub_error_t;
 
+extern unsigned int lma;
+extern unsigned int vma;
 extern unsigned long install_partition;
 extern unsigned long boot_drive;
 extern unsigned long install_second_sector;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]