summaryrefslogtreecommitdiff
path: root/utils/imxtools/sbtools/elf.c
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-08-06 15:46:09 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2013-08-06 21:24:38 +0200
commit8b13d2f5f100d088746a1f8dd94f8ab82acc9b5b (patch)
treea9308e2e5ff87a637b467cc95b839a616c178785 /utils/imxtools/sbtools/elf.c
parent48ccea96f25318b951607f192d1bfbe76b12eadf (diff)
downloadrockbox-8b13d2f5f100d088746a1f8dd94f8ab82acc9b5b.zip
rockbox-8b13d2f5f100d088746a1f8dd94f8ab82acc9b5b.tar.gz
rockbox-8b13d2f5f100d088746a1f8dd94f8ab82acc9b5b.tar.bz2
rockbox-8b13d2f5f100d088746a1f8dd94f8ab82acc9b5b.tar.xz
elf: fix handling of virtual/physical addresses
Remove the hackish elf_translate_addresses which should not have existed in the first place, on write always compute the physical address of a section using elf_translate_virtual_address which makes it possible to specify any virtual to physical mapping and fail nicely if there is none. Change-Id: I4f436945e90280a6fd9430de6c642dbeb8e23d40
Diffstat (limited to 'utils/imxtools/sbtools/elf.c')
-rw-r--r--utils/imxtools/sbtools/elf.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/utils/imxtools/sbtools/elf.c b/utils/imxtools/sbtools/elf.c
index adf876e..5017251 100644
--- a/utils/imxtools/sbtools/elf.c
+++ b/utils/imxtools/sbtools/elf.c
@@ -519,8 +519,8 @@ void elf_write_file(struct elf_params_t *params, elf_write_fn_t write,
phdr.p_offset = sec->offset;
else
phdr.p_offset = 0;
- phdr.p_paddr = sec->addr;
- phdr.p_vaddr = phdr.p_paddr; /* assume identity map ? */
+ phdr.p_paddr = elf_translate_virtual_address(params, sec->addr);
+ phdr.p_vaddr = sec->addr; /* assume identity map ? */
phdr.p_memsz = sec->size;
if(sec->type == EST_LOAD)
phdr.p_filesz = phdr.p_memsz;
@@ -795,17 +795,6 @@ uint32_t elf_translate_virtual_address(struct elf_params_t *params, uint32_t add
return addr;
}
-void elf_translate_addresses(struct elf_params_t *params)
-{
- struct elf_section_t *sec = params->first_section;
- while(sec)
- {
- sec->addr = elf_translate_virtual_address(params, sec->addr);
- sec = sec->next;
- }
- params->start_addr = elf_translate_virtual_address(params, params->start_addr);
-}
-
bool elf_is_empty(struct elf_params_t *params)
{
return params->first_section == NULL;