changeset 1253:9ecd8873f657

Use LMA, not VMA
author gthomas
date Mon, 29 Sep 2003 14:49:46 +0000
parents 4dfb5c337649
children 29e672adfc06
files packages/redboot/current/ChangeLog packages/redboot/current/src/load.c
diffstat 2 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/packages/redboot/current/ChangeLog
+++ b/packages/redboot/current/ChangeLog
@@ -1,3 +1,10 @@
+2003-09-29  Gary Thomas  <gary@mlbassoc.com>
+
+	* src/load.c (load_elf_image): Use LMA (loader memory address), instead
+	of VMA (virtual memory address) to load code.  If LMA != VMA, it's up
+	to the loaded program to figure it out.  
+	Inspired by Artur Lipowski <LAL@pro.onet.pl>
+
 2003-09-26  Nick Garnett  <nickg@balti.calivar.com>
 
 	* doc/redboot_installing.sgml: Fixed bogus memory sizes in AT91
--- a/packages/redboot/current/src/load.c
+++ b/packages/redboot/current/src/load.c
@@ -340,8 +340,8 @@ load_elf_image(getc_t getc, unsigned lon
         // Set address offset based on lowest address in file.
         addr_offset = 0xFFFFFFFF;
         for (phx = 0;  phx < ehdr.e_phnum;  phx++) {    
-            if (phdr[phx].p_vaddr < addr_offset) {
-                addr_offset = phdr[phx].p_vaddr;
+            if (phdr[phx].p_paddr < addr_offset) {
+                addr_offset = phdr[phx].p_paddr;
             }
         }
         addr_offset = (unsigned long)base - addr_offset;
@@ -351,7 +351,7 @@ load_elf_image(getc_t getc, unsigned lon
     for (phx = 0;  phx < ehdr.e_phnum;  phx++) {
         if (phdr[phx].p_type == PT_LOAD) {
             // Loadable segment
-            addr = (unsigned char *)phdr[phx].p_vaddr;
+            addr = (unsigned char *)phdr[phx].p_paddr;
             len = phdr[phx].p_filesz;
             if ((unsigned long)addr < lowest_address) {
                 lowest_address = (unsigned long)addr;