MIPS: elf2ecoff: Rewrite main processing loop to switch.
The if construct was getting hard to read and would be getting even more complex with the next bug fix. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
39148e94e3
commit
06a40ed186
1 changed files with 33 additions and 27 deletions
|
@ -349,39 +349,45 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
for (i = 0; i < ex.e_phnum; i++) {
|
for (i = 0; i < ex.e_phnum; i++) {
|
||||||
/* Section types we can ignore... */
|
/* Section types we can ignore... */
|
||||||
if (ph[i].p_type == PT_NULL || ph[i].p_type == PT_NOTE ||
|
switch (ph[i].p_type) {
|
||||||
ph[i].p_type == PT_PHDR
|
case PT_NULL:
|
||||||
|| ph[i].p_type == PT_MIPS_REGINFO)
|
case PT_NOTE:
|
||||||
|
case PT_PHDR:
|
||||||
|
case PT_MIPS_REGINFO:
|
||||||
continue;
|
continue;
|
||||||
/* Section types we can't handle... */
|
|
||||||
else if (ph[i].p_type != PT_LOAD) {
|
case PT_LOAD:
|
||||||
|
/* Writable (data) segment? */
|
||||||
|
if (ph[i].p_flags & PF_W) {
|
||||||
|
struct sect ndata, nbss;
|
||||||
|
|
||||||
|
ndata.vaddr = ph[i].p_vaddr;
|
||||||
|
ndata.len = ph[i].p_filesz;
|
||||||
|
nbss.vaddr = ph[i].p_vaddr + ph[i].p_filesz;
|
||||||
|
nbss.len = ph[i].p_memsz - ph[i].p_filesz;
|
||||||
|
|
||||||
|
combine(&data, &ndata, 0);
|
||||||
|
combine(&bss, &nbss, 1);
|
||||||
|
} else {
|
||||||
|
struct sect ntxt;
|
||||||
|
|
||||||
|
ntxt.vaddr = ph[i].p_vaddr;
|
||||||
|
ntxt.len = ph[i].p_filesz;
|
||||||
|
|
||||||
|
combine(&text, &ntxt, 0);
|
||||||
|
}
|
||||||
|
/* Remember the lowest segment start address. */
|
||||||
|
if (ph[i].p_vaddr < cur_vma)
|
||||||
|
cur_vma = ph[i].p_vaddr;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* Section types we can't handle... */
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Program header %d type %d can't be converted.\n",
|
"Program header %d type %d can't be converted.\n",
|
||||||
ex.e_phnum, ph[i].p_type);
|
ex.e_phnum, ph[i].p_type);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
/* Writable (data) segment? */
|
|
||||||
if (ph[i].p_flags & PF_W) {
|
|
||||||
struct sect ndata, nbss;
|
|
||||||
|
|
||||||
ndata.vaddr = ph[i].p_vaddr;
|
|
||||||
ndata.len = ph[i].p_filesz;
|
|
||||||
nbss.vaddr = ph[i].p_vaddr + ph[i].p_filesz;
|
|
||||||
nbss.len = ph[i].p_memsz - ph[i].p_filesz;
|
|
||||||
|
|
||||||
combine(&data, &ndata, 0);
|
|
||||||
combine(&bss, &nbss, 1);
|
|
||||||
} else {
|
|
||||||
struct sect ntxt;
|
|
||||||
|
|
||||||
ntxt.vaddr = ph[i].p_vaddr;
|
|
||||||
ntxt.len = ph[i].p_filesz;
|
|
||||||
|
|
||||||
combine(&text, &ntxt, 0);
|
|
||||||
}
|
|
||||||
/* Remember the lowest segment start address. */
|
|
||||||
if (ph[i].p_vaddr < cur_vma)
|
|
||||||
cur_vma = ph[i].p_vaddr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sections must be in order to be converted... */
|
/* Sections must be in order to be converted... */
|
||||||
|
|
Loading…
Add table
Reference in a new issue