summaryrefslogtreecommitdiff
path: root/utils/imxtools/sbtools/sbtoelf.c
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-07-30 17:12:56 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2013-08-06 21:24:38 +0200
commit76446dda459e2696d2a772d77ab4ed585901de13 (patch)
tree1e44f1bd17e28b161310cb48a8bffda22f3c81e2 /utils/imxtools/sbtools/sbtoelf.c
parentda8ebcec2fc82fd6b25e08568e37ac88e34e05e6 (diff)
downloadrockbox-76446dda459e2696d2a772d77ab4ed585901de13.tar.gz
rockbox-76446dda459e2696d2a772d77ab4ed585901de13.zip
sbtools: make code aware of elf section names
Change-Id: I7ab657959e38d2fcb2c7e6d9858facfb83101423
Diffstat (limited to 'utils/imxtools/sbtools/sbtoelf.c')
-rw-r--r--utils/imxtools/sbtools/sbtoelf.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/utils/imxtools/sbtools/sbtoelf.c b/utils/imxtools/sbtools/sbtoelf.c
index a13e18b81d..95fc7381a9 100644
--- a/utils/imxtools/sbtools/sbtoelf.c
+++ b/utils/imxtools/sbtools/sbtoelf.c
@@ -107,16 +107,20 @@ static void extract_sb_section(struct sb_section_t *sec)
107 struct elf_params_t elf; 107 struct elf_params_t elf;
108 elf_init(&elf); 108 elf_init(&elf);
109 109
110 int bss_idx = 0, text_idx = 0;
111 char secname[32];
110 for(int i = 0; i < sec->nr_insts; i++) 112 for(int i = 0; i < sec->nr_insts; i++)
111 { 113 {
112 struct sb_inst_t *inst = &sec->insts[i]; 114 struct sb_inst_t *inst = &sec->insts[i];
113 switch(inst->inst) 115 switch(inst->inst)
114 { 116 {
115 case SB_INST_LOAD: 117 case SB_INST_LOAD:
116 elf_add_load_section(&elf, inst->addr, inst->size, inst->data); 118 sprintf(secname, ".text%d", text_idx++);
119 elf_add_load_section(&elf, inst->addr, inst->size, inst->data, secname);
117 break; 120 break;
118 case SB_INST_FILL: 121 case SB_INST_FILL:
119 elf_add_fill_section(&elf, inst->addr, inst->size, inst->pattern); 122 sprintf(secname, ".bss%d", bss_idx++);
123 elf_add_fill_section(&elf, inst->addr, inst->size, inst->pattern, secname);
120 break; 124 break;
121 case SB_INST_CALL: 125 case SB_INST_CALL:
122 case SB_INST_JUMP: 126 case SB_INST_JUMP:
@@ -124,6 +128,7 @@ static void extract_sb_section(struct sb_section_t *sec)
124 extract_elf_section(&elf, elf_count++, sec->identifier); 128 extract_elf_section(&elf, elf_count++, sec->identifier);
125 elf_release(&elf); 129 elf_release(&elf);
126 elf_init(&elf); 130 elf_init(&elf);
131 bss_idx = text_idx = 0;
127 break; 132 break;
128 default: 133 default:
129 /* ignore mode and nop */ 134 /* ignore mode and nop */
@@ -166,16 +171,20 @@ static void extract_sb1_file(struct sb1_file_t *file)
166 struct elf_params_t elf; 171 struct elf_params_t elf;
167 elf_init(&elf); 172 elf_init(&elf);
168 173
174 int bss_idx = 0, text_idx = 0;
175 char secname[32];
169 for(int i = 0; i < file->nr_insts; i++) 176 for(int i = 0; i < file->nr_insts; i++)
170 { 177 {
171 struct sb1_inst_t *inst = &file->insts[i]; 178 struct sb1_inst_t *inst = &file->insts[i];
172 switch(inst->cmd) 179 switch(inst->cmd)
173 { 180 {
174 case SB1_INST_LOAD: 181 case SB1_INST_LOAD:
175 elf_add_load_section(&elf, inst->addr, inst->size, inst->data); 182 sprintf(secname, ".text%d", text_idx++);
183 elf_add_load_section(&elf, inst->addr, inst->size, inst->data, secname);
176 break; 184 break;
177 case SB1_INST_FILL: 185 case SB1_INST_FILL:
178 elf_add_fill_section(&elf, inst->addr, inst->size, inst->pattern); 186 sprintf(secname, ".bss%d", bss_idx++);
187 elf_add_fill_section(&elf, inst->addr, inst->size, inst->pattern, secname);
179 break; 188 break;
180 case SB1_INST_CALL: 189 case SB1_INST_CALL:
181 case SB1_INST_JUMP: 190 case SB1_INST_JUMP: