Hi<br><br>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.
<br><br>The reason the .text section is not copied is because it it is skipped due to the block.<br><br> if (!(shdr->sh_flags & SHF_ALLOC)<br> || shdr->sh_addr == 0 || shdr->sh_size == 0) {<br>
continue;<br> }<br><br>because shdr->sh_addr = 0. <br><br>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.
<br><br>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.
<br><br>This is my first posting here, I apologize in advance if there is an obvious answer to my question.<br><br>Ali<br><br><br>