summaryrefslogtreecommitdiff
path: root/utils/sbtools/elf.h
diff options
context:
space:
mode:
authorAmaury Pouly <pamaury@rockbox.org>2011-09-15 14:36:58 +0000
committerAmaury Pouly <pamaury@rockbox.org>2011-09-15 14:36:58 +0000
commit64b46723591adc8b563a692c0e91681d2fcd4ad4 (patch)
tree57b37b96b1629164b0a9894600d24b24685751d9 /utils/sbtools/elf.h
parent782708e4947045d97ebcf406712cd5ba1024a820 (diff)
downloadrockbox-64b46723591adc8b563a692c0e91681d2fcd4ad4.tar.gz
rockbox-64b46723591adc8b563a692c0e91681d2fcd4ad4.zip
sbtools: implement virtual to physical address translation for elf files
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30556 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'utils/sbtools/elf.h')
-rw-r--r--utils/sbtools/elf.h21
1 files changed, 17 insertions, 4 deletions
diff --git a/utils/sbtools/elf.h b/utils/sbtools/elf.h
index b145bfffc5..d63b9a93b7 100644
--- a/utils/sbtools/elf.h
+++ b/utils/sbtools/elf.h
@@ -16,24 +16,35 @@ enum elf_section_type_t
16 16
17struct elf_section_t 17struct elf_section_t
18{ 18{
19 uint32_t addr; 19 uint32_t addr; /* virtual address */
20 uint32_t size; 20 uint32_t size; /* virtual size */
21 enum elf_section_type_t type; 21 enum elf_section_type_t type;
22 /* <union> */ 22 /* <union> */
23 void *section; 23 void *section; /* data */
24 uint32_t pattern; 24 uint32_t pattern; /* fill pattern */
25 /* </union> */ 25 /* </union> */
26 struct elf_section_t *next; 26 struct elf_section_t *next;
27 /* Internal to elf_write_file */ 27 /* Internal to elf_write_file */
28 uint32_t offset; 28 uint32_t offset;
29}; 29};
30 30
31struct elf_segment_t
32{
33 uint32_t vaddr; /* virtual address */
34 uint32_t paddr; /* physical address */
35 uint32_t vsize; /* virtual size */
36 uint32_t psize; /* physical size */
37 struct elf_segment_t *next;
38};
39
31struct elf_params_t 40struct elf_params_t
32{ 41{
33 bool has_start_addr; 42 bool has_start_addr;
34 uint32_t start_addr; 43 uint32_t start_addr;
35 struct elf_section_t *first_section; 44 struct elf_section_t *first_section;
36 struct elf_section_t *last_section; 45 struct elf_section_t *last_section;
46 struct elf_segment_t *first_segment;
47 struct elf_segment_t *last_segment;
37}; 48};
38 49
39typedef bool (*elf_read_fn_t)(void *user, uint32_t addr, void *buf, size_t count); 50typedef bool (*elf_read_fn_t)(void *user, uint32_t addr, void *buf, size_t count);
@@ -46,6 +57,8 @@ void elf_add_load_section(struct elf_params_t *params,
46 uint32_t load_addr, uint32_t size, const void *section); 57 uint32_t load_addr, uint32_t size, const void *section);
47void elf_add_fill_section(struct elf_params_t *params, 58void elf_add_fill_section(struct elf_params_t *params,
48 uint32_t fill_addr, uint32_t size, uint32_t pattern); 59 uint32_t fill_addr, uint32_t size, uint32_t pattern);
60uint32_t elf_translate_virtual_address(struct elf_params_t *params, uint32_t addr);
61void elf_translate_addresses(struct elf_params_t *params);
49void elf_write_file(struct elf_params_t *params, elf_write_fn_t write, void *user); 62void elf_write_file(struct elf_params_t *params, elf_write_fn_t write, void *user);
50bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read, elf_printf_fn_t printf, 63bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read, elf_printf_fn_t printf,
51 void *user); 64 void *user);