[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 04/14] Revert "hw/elf_ops: Ignore loadable segments with zero
From: |
Alex Bennée |
Subject: |
[PATCH v2 04/14] Revert "hw/elf_ops: Ignore loadable segments with zero size" |
Date: |
Wed, 7 Feb 2024 16:38:02 +0000 |
This regressed qemu-system-xtensa:
TEST test_load_store on xtensa
qemu-system-xtensa: Some ROM regions are overlapping
These ROM regions might have been loaded by direct user request or by default.
They could be BIOS/firmware images, a guest kernel, initrd or some other file
loaded into guest memory.
Check whether you intended to load all this guest code, and whether it has
been built to load to the correct addresses.
The following two regions overlap (in the memory address space):
test_load_store ELF program header segment 1 (addresses 0x0000000000001000
- 0x0000000000001f26)
test_load_store ELF program header segment 2 (addresses 0x0000000000001ab8
- 0x0000000000001ab8)
make[1]: *** [Makefile:187: run-test_load_store] Error 1
This reverts commit 62570f1434160d356311e1c217537e24a4ac85cd.
Message-Id: <20240201122835.1712347-5-alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
include/hw/elf_ops.h | 75 +++++++++++++++++++++-----------------------
1 file changed, 36 insertions(+), 39 deletions(-)
diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h
index 3e966ddd5a1..9c35d1b9da6 100644
--- a/include/hw/elf_ops.h
+++ b/include/hw/elf_ops.h
@@ -427,16 +427,6 @@ static ssize_t glue(load_elf, SZ)(const char *name, int fd,
file_size = ph->p_filesz; /* Size of the allocated data */
data_offset = ph->p_offset; /* Offset where the data is located */
- /*
- * Some ELF files really do have segments of zero size;
- * just ignore them rather than trying to set the wrong addr,
- * or create empty ROM blobs, because the zero-length blob can
- * falsely trigger the overlapping-ROM-blobs check.
- */
- if (mem_size == 0) {
- continue;
- }
-
if (file_size > 0) {
if (g_mapped_file_get_length(mapped_file) <
file_size + data_offset) {
@@ -540,38 +530,45 @@ static ssize_t glue(load_elf, SZ)(const char *name, int
fd,
*pentry = ehdr.e_entry - ph->p_vaddr + ph->p_paddr;
}
- if (load_rom) {
- g_autofree char *label =
- g_strdup_printf("%s ELF program header segment %d",
- name, i);
-
- /*
- * rom_add_elf_program() takes its own reference to
- * 'mapped_file'.
- */
- rom_add_elf_program(label, mapped_file, data, file_size,
- mem_size, addr, as);
- } else {
- MemTxResult res;
-
- res = address_space_write(as ? as : &address_space_memory,
- addr, MEMTXATTRS_UNSPECIFIED,
- data, file_size);
- if (res != MEMTX_OK) {
- goto fail;
- }
- /*
- * We need to zero'ify the space that is not copied
- * from file
- */
- if (file_size < mem_size) {
- res = address_space_set(as ? as : &address_space_memory,
- addr + file_size, 0,
- mem_size - file_size,
- MEMTXATTRS_UNSPECIFIED);
+ /* 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.
+ */
+ if (mem_size != 0) {
+ if (load_rom) {
+ g_autofree char *label =
+ g_strdup_printf("%s ELF program header segment %d",
+ name, i);
+
+ /*
+ * rom_add_elf_program() takes its own reference to
+ * 'mapped_file'.
+ */
+ rom_add_elf_program(label, mapped_file, data, file_size,
+ mem_size, addr, as);
+ } else {
+ MemTxResult res;
+
+ res = address_space_write(as ? as : &address_space_memory,
+ addr, MEMTXATTRS_UNSPECIFIED,
+ data, file_size);
if (res != MEMTX_OK) {
goto fail;
}
+ /*
+ * We need to zero'ify the space that is not copied
+ * from file
+ */
+ if (file_size < mem_size) {
+ res = address_space_set(as ? as :
&address_space_memory,
+ addr + file_size, 0,
+ mem_size - file_size,
+ MEMTXATTRS_UNSPECIFIED);
+ if (res != MEMTX_OK) {
+ goto fail;
+ }
+ }
}
}
--
2.39.2
- [PATCH v2 00/14] maintainer updates for 9.0 pre-PR (docker, plugin tests, deprecation, elf, semihosting, gdbstub), Alex Bennée, 2024/02/07
- [PATCH v2 01/14] tests/docker: Add sqlite3 module to openSUSE Leap container, Alex Bennée, 2024/02/07
- [PATCH v2 02/14] docs: mark CRIS support as deprecated, Alex Bennée, 2024/02/07
- [PATCH v2 04/14] Revert "hw/elf_ops: Ignore loadable segments with zero size",
Alex Bennée <=
- [PATCH v2 03/14] configure: run plugin TCG tests again, Alex Bennée, 2024/02/07
- [PATCH v2 05/14] tests/vm: Set UseDNS=no in the sshd configuration, Alex Bennée, 2024/02/07
- [PATCH v2 08/14] meson: Link with libinotify on FreeBSD, Alex Bennée, 2024/02/07
- [PATCH v2 07/14] test-util-filemonitor: Adapt to the FreeBSD inotify rename semantics, Alex Bennée, 2024/02/07
- [PATCH v2 09/14] kconfig: use "select" to enable semihosting, Alex Bennée, 2024/02/07
- [PATCH v2 06/14] tests/vm/freebsd: Reload the sshd configuration, Alex Bennée, 2024/02/07
- [PATCH v2 10/14] gdbstub: Expose TARGET_SIGTRAP in a target-agnostic way, Alex Bennée, 2024/02/07