Skip to content

Commit

Permalink
MIPS: elf2ecoff: Rewrite main processing loop to switch.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ralf Baechle committed Feb 4, 2015
1 parent 39148e9 commit 06a40ed
Showing 1 changed file with 33 additions and 27 deletions.
60 changes: 33 additions & 27 deletions arch/mips/boot/elf2ecoff.c
Original file line number Diff line number Diff line change
@@ -349,39 +349,45 @@ int main(int argc, char *argv[])

for (i = 0; i < ex.e_phnum; i++) {
/* Section types we can ignore... */
if (ph[i].p_type == PT_NULL || ph[i].p_type == PT_NOTE ||
ph[i].p_type == PT_PHDR
|| ph[i].p_type == PT_MIPS_REGINFO)
switch (ph[i].p_type) {
case PT_NULL:
case PT_NOTE:
case PT_PHDR:
case PT_MIPS_REGINFO:
continue;
/* Section types we can't handle... */
else if (ph[i].p_type != PT_LOAD) {
fprintf(stderr,
"Program header %d type %d can't be converted.\n",
ex.e_phnum, ph[i].p_type);
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;
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;
combine(&data, &ndata, 0);
combine(&bss, &nbss, 1);
} else {
struct sect ntxt;

ntxt.vaddr = ph[i].p_vaddr;
ntxt.len = ph[i].p_filesz;
ntxt.vaddr = ph[i].p_vaddr;
ntxt.len = ph[i].p_filesz;

combine(&text, &ntxt, 0);
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,
"Program header %d type %d can't be converted.\n",
ex.e_phnum, ph[i].p_type);
exit(1);
}
/* 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... */

0 comments on commit 06a40ed

Please sign in to comment.