# HG changeset patch # User gthomas # Date 1064846986 0 # Node ID 9ecd8873f6570f697d5e666294c6c49a3c706960 # Parent 4dfb5c33764945e0025e5e5427b84db6e43cd1f6 Use LMA, not VMA diff --git a/packages/redboot/current/ChangeLog b/packages/redboot/current/ChangeLog --- a/packages/redboot/current/ChangeLog +++ b/packages/redboot/current/ChangeLog @@ -1,3 +1,10 @@ +2003-09-29 Gary Thomas + + * 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 + 2003-09-26 Nick Garnett * doc/redboot_installing.sgml: Fixed bogus memory sizes in AT91 diff --git a/packages/redboot/current/src/load.c b/packages/redboot/current/src/load.c --- 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;