loader: Ignore zero-sized ELF segments
Some ELF files have program headers that specify segments that are of zero size. Ignore them, rather than trying to create zero-length ROM blobs for them, because the zero-length blob can falsely trigger the overlapping-ROM-blobs check. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Hua Yanghao <huayanghao@gmail.com> Message-id: 1502116754-18867-3-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
bf1733392c
commit
f33e5e6299
@ -451,14 +451,24 @@ static int glue(load_elf, SZ)(const char *name, int fd,
|
||||
*pentry = ehdr.e_entry - ph->p_vaddr + ph->p_paddr;
|
||||
}
|
||||
|
||||
if (load_rom) {
|
||||
snprintf(label, sizeof(label), "phdr #%d: %s", i, name);
|
||||
|
||||
/* rom_add_elf_program() seize the ownership of 'data' */
|
||||
rom_add_elf_program(label, data, file_size, mem_size, addr, as);
|
||||
} else {
|
||||
cpu_physical_memory_write(addr, data, file_size);
|
||||
if (mem_size == 0) {
|
||||
/* Some ELF files really do have segments of zero size;
|
||||
* just ignore them rather than trying to create empty
|
||||
* ROM blobs, because the zero-length blob can falsely
|
||||
* trigger the overlapping-ROM-blobs check.
|
||||
*/
|
||||
g_free(data);
|
||||
} else {
|
||||
if (load_rom) {
|
||||
snprintf(label, sizeof(label), "phdr #%d: %s", i, name);
|
||||
|
||||
/* rom_add_elf_program() seize the ownership of 'data' */
|
||||
rom_add_elf_program(label, data, file_size, mem_size,
|
||||
addr, as);
|
||||
} else {
|
||||
cpu_physical_memory_write(addr, data, file_size);
|
||||
g_free(data);
|
||||
}
|
||||
}
|
||||
|
||||
total_size += mem_size;
|
||||
|
Loading…
Reference in New Issue
Block a user