elf: take phdr offset into account when calculating the program load address

The first program header does not necessarily start at offset 0. This change
corresponds to what the Linux kernel does in load_elf_binary().

Signed-off-by: Jonas Maebe <jonas.maebe@elis.ugent.be>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
Jonas Maebe 2014-10-24 16:07:15 +02:00 committed by Riku Voipio
parent 686581adcf
commit a93934fecd

View File

@ -1820,7 +1820,7 @@ static void load_elf_image(const char *image_name, int image_fd,
loaddr = -1, hiaddr = 0; loaddr = -1, hiaddr = 0;
for (i = 0; i < ehdr->e_phnum; ++i) { for (i = 0; i < ehdr->e_phnum; ++i) {
if (phdr[i].p_type == PT_LOAD) { if (phdr[i].p_type == PT_LOAD) {
abi_ulong a = phdr[i].p_vaddr; abi_ulong a = phdr[i].p_vaddr - phdr[i].p_offset;
if (a < loaddr) { if (a < loaddr) {
loaddr = a; loaddr = a;
} }