diff options
author | Amaury Pouly <pamaury@rockbox.org> | 2011-09-15 14:36:58 +0000 |
---|---|---|
committer | Amaury Pouly <pamaury@rockbox.org> | 2011-09-15 14:36:58 +0000 |
commit | 64b46723591adc8b563a692c0e91681d2fcd4ad4 (patch) | |
tree | 57b37b96b1629164b0a9894600d24b24685751d9 /utils/sbtools/elf.h | |
parent | 782708e4947045d97ebcf406712cd5ba1024a820 (diff) | |
download | rockbox-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.h | 21 |
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 | ||
17 | struct elf_section_t | 17 | struct 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 | ||
31 | struct 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 | |||
31 | struct elf_params_t | 40 | struct 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 | ||
39 | typedef bool (*elf_read_fn_t)(void *user, uint32_t addr, void *buf, size_t count); | 50 | typedef 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); |
47 | void elf_add_fill_section(struct elf_params_t *params, | 58 | void 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); |
60 | uint32_t elf_translate_virtual_address(struct elf_params_t *params, uint32_t addr); | ||
61 | void elf_translate_addresses(struct elf_params_t *params); | ||
49 | void elf_write_file(struct elf_params_t *params, elf_write_fn_t write, void *user); | 62 | void elf_write_file(struct elf_params_t *params, elf_write_fn_t write, void *user); |
50 | bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read, elf_printf_fn_t printf, | 63 | bool elf_read_file(struct elf_params_t *params, elf_read_fn_t read, elf_printf_fn_t printf, |
51 | void *user); | 64 | void *user); |