[U-Boot-Users] Is there a redundant check in function "load_elf_image" in common/cmd_elf.c?

Ali Rouhi rouhi.ali at gmail.com
Thu Dec 6 23:36:57 CET 2007


Hi

I have been trying to use the "bootelf" command of u-boot. I  noticed that
if the  program text is based at address 0x0 the command fails because the
.text section does not copied by the load_elf_image function (even though
the correct entry point is returned by load_elf_image). The same test
program I have boots correctly if the .text section is placed elsewhere.

The reason the .text section is not copied is because it it is skipped due
to the block.

        if (!(shdr->sh_flags & SHF_ALLOC)
           || shdr->sh_addr == 0 || shdr->sh_size == 0) {
            continue;
        }

because shdr->sh_addr = 0.

I put in a few printfs to print information for each section, and I can see
that various debug sections, symbol table etc have sh_addr = 0 and certainly
they shouldn't be loaded, but the clause "!(shdr->sh_flags & SHF_ALLOC)"
takes care of these anyway - (admittedly only for my particular ELF!). So I
removed the "shdr->sh_addr == 0" check, recompiled u-boot (which for me is
not based at 0x0!) and was able to boot my ELF.

Perhaps the "shdr->sh_addr == 0" clause filters out sections for other types
of ELFs - but should another mechanism be used to remove them from the list?
In the case of my ARM 926ejs target the .text needs to be based at 0x0 since
the interrupt vectors have to be place at 0x0.

This is my first posting here, I apologize in advance if there is an obvious
answer to my question.

Ali
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.denx.de/pipermail/u-boot/attachments/20071206/b41de9bf/attachment.htm 


More information about the U-Boot mailing list