[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 24/36] hw/loader: Pass ELFDATA endian order argument to load_elf_a
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 24/36] hw/loader: Pass ELFDATA endian order argument to load_elf_as() |
Date: |
Fri, 31 Jan 2025 22:05:07 +0100 |
Rather than passing a boolean 'is_big_endian' argument,
directly pass the ELFDATA, which can be unspecified using
the ELFDATANONE value.
Update the call sites:
0 -> ELFDATA2LSB
1 -> ELFDATA2MSB
Note, this allow removing the target_words_bigendian() call
in the GENERIC_LOADER device, where we pass ELFDATANONE.
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250127113824.50177-6-philmd@linaro.org>
---
include/hw/loader.h | 2 +-
hw/arm/armv7m.c | 2 +-
hw/arm/boot.c | 16 ++++++++--------
hw/avr/boot.c | 2 +-
hw/core/generic-loader.c | 6 +-----
hw/core/loader.c | 8 ++++----
6 files changed, 16 insertions(+), 20 deletions(-)
diff --git a/include/hw/loader.h b/include/hw/loader.h
index 8202c376043..84737c05b8d 100644
--- a/include/hw/loader.h
+++ b/include/hw/loader.h
@@ -162,7 +162,7 @@ ssize_t load_elf_as(const char *filename,
uint64_t (*elf_note_fn)(void *, void *, bool),
uint64_t (*translate_fn)(void *, uint64_t),
void *translate_opaque, uint64_t *pentry, uint64_t
*lowaddr,
- uint64_t *highaddr, uint32_t *pflags, int big_endian,
+ uint64_t *highaddr, uint32_t *pflags, int elf_data_order,
int elf_machine, int clear_lsb, int data_swab,
AddressSpace *as);
diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
index a67a890a33e..98a69846119 100644
--- a/hw/arm/armv7m.c
+++ b/hw/arm/armv7m.c
@@ -608,7 +608,7 @@ void armv7m_load_kernel(ARMCPU *cpu, const char
*kernel_filename,
if (kernel_filename) {
image_size = load_elf_as(kernel_filename, NULL, NULL, NULL,
&entry, NULL, NULL,
- NULL, 0, EM_ARM, 1, 0, as);
+ NULL, ELFDATA2LSB, EM_ARM, 1, 0, as);
if (image_size < 0) {
image_size = load_image_targphys_as(kernel_filename, mem_base,
mem_size, as);
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index b44bea8a821..cbc24356fc1 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -798,7 +798,7 @@ static ssize_t arm_load_elf(struct arm_boot_info *info,
uint64_t *pentry,
Elf64_Ehdr h64;
} elf_header;
int data_swab = 0;
- bool big_endian;
+ int elf_data_order;
ssize_t ret;
Error *err = NULL;
@@ -814,12 +814,12 @@ static ssize_t arm_load_elf(struct arm_boot_info *info,
uint64_t *pentry,
}
if (elf_is64) {
- big_endian = elf_header.h64.e_ident[EI_DATA] == ELFDATA2MSB;
- info->endianness = big_endian ? ARM_ENDIANNESS_BE8
- : ARM_ENDIANNESS_LE;
+ elf_data_order = elf_header.h64.e_ident[EI_DATA];
+ info->endianness = elf_data_order == ELFDATA2MSB ? ARM_ENDIANNESS_BE8
+ : ARM_ENDIANNESS_LE;
} else {
- big_endian = elf_header.h32.e_ident[EI_DATA] == ELFDATA2MSB;
- if (big_endian) {
+ elf_data_order = elf_header.h32.e_ident[EI_DATA];
+ if (elf_data_order == ELFDATA2MSB) {
if (bswap32(elf_header.h32.e_flags) & EF_ARM_BE8) {
info->endianness = ARM_ENDIANNESS_BE8;
} else {
@@ -839,8 +839,8 @@ static ssize_t arm_load_elf(struct arm_boot_info *info,
uint64_t *pentry,
}
ret = load_elf_as(info->kernel_filename, NULL, NULL, NULL,
- pentry, lowaddr, highaddr, NULL, big_endian, elf_machine,
- 1, data_swab, as);
+ pentry, lowaddr, highaddr, NULL, elf_data_order,
+ elf_machine, 1, data_swab, as);
if (ret <= 0) {
/* The header loaded but the image didn't */
error_report("Couldn't load elf '%s': %s",
diff --git a/hw/avr/boot.c b/hw/avr/boot.c
index 6a91dcd12d0..e5a29c7218e 100644
--- a/hw/avr/boot.c
+++ b/hw/avr/boot.c
@@ -73,7 +73,7 @@ bool avr_load_firmware(AVRCPU *cpu, MachineState *ms,
bytes_loaded = load_elf_as(filename, NULL, NULL, NULL,
&entry, NULL, NULL,
- &e_flags, 0, EM_AVR, 0, 0, NULL);
+ &e_flags, ELFDATA2LSB, EM_AVR, 0, 0, NULL);
if (bytes_loaded >= 0) {
/* If ELF file is provided, determine CPU type reading ELF e_flags. */
const char *elf_cpu = avr_elf_e_flags_to_cpu_type(e_flags);
diff --git a/hw/core/generic-loader.c b/hw/core/generic-loader.c
index fb354693aff..d9f5c2e8325 100644
--- a/hw/core/generic-loader.c
+++ b/hw/core/generic-loader.c
@@ -31,7 +31,6 @@
*/
#include "qemu/osdep.h"
-#include "exec/tswap.h"
#include "system/dma.h"
#include "system/reset.h"
#include "hw/boards.h"
@@ -66,7 +65,6 @@ static void generic_loader_realize(DeviceState *dev, Error
**errp)
{
GenericLoaderState *s = GENERIC_LOADER(dev);
hwaddr entry;
- int big_endian;
ssize_t size = 0;
s->set_pc = false;
@@ -134,14 +132,12 @@ static void generic_loader_realize(DeviceState *dev,
Error **errp)
s->cpu = first_cpu;
}
- big_endian = target_words_bigendian();
-
if (s->file) {
AddressSpace *as = s->cpu ? s->cpu->as : NULL;
if (!s->force_raw) {
size = load_elf_as(s->file, NULL, NULL, NULL, &entry, NULL, NULL,
- NULL, big_endian, 0, 0, 0, as);
+ NULL, ELFDATANONE, 0, 0, 0, as);
if (size < 0) {
size = load_uimage_as(s->file, &entry, NULL, NULL, NULL, NULL,
diff --git a/hw/core/loader.c b/hw/core/loader.c
index f1fab3e91b1..cc0631e7dd5 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -413,7 +413,8 @@ ssize_t load_elf(const char *filename,
int elf_machine, int clear_lsb, int data_swab)
{
return load_elf_as(filename, elf_note_fn, translate_fn, translate_opaque,
- pentry, lowaddr, highaddr, pflags, big_endian,
+ pentry, lowaddr, highaddr, pflags,
+ big_endian ? ELFDATA2MSB : ELFDATA2LSB,
elf_machine, clear_lsb, data_swab, NULL);
}
@@ -422,14 +423,13 @@ ssize_t load_elf_as(const char *filename,
uint64_t (*elf_note_fn)(void *, void *, bool),
uint64_t (*translate_fn)(void *, uint64_t),
void *translate_opaque, uint64_t *pentry, uint64_t
*lowaddr,
- uint64_t *highaddr, uint32_t *pflags, int big_endian,
+ uint64_t *highaddr, uint32_t *pflags, int elf_data_order,
int elf_machine, int clear_lsb, int data_swab,
AddressSpace *as)
{
return load_elf_ram_sym(filename, elf_note_fn,
translate_fn, translate_opaque,
- pentry, lowaddr, highaddr, pflags,
- big_endian ? ELFDATA2MSB : ELFDATA2LSB,
+ pentry, lowaddr, highaddr, pflags, elf_data_order,
elf_machine, clear_lsb, data_swab, as,
true, NULL);
}
--
2.47.1
- [PULL 14/36] hw/ipack: Clarify KConfig symbols, (continued)
- [PULL 14/36] hw/ipack: Clarify KConfig symbols, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 15/36] hw/ipack: Remove legacy qemu_allocate_irqs() use, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 16/36] hw/sh4/r2d: Convert legacy qemu_allocate_irqs() to qemu_init_irqs(), Philippe Mathieu-Daudé, 2025/01/31
- [PULL 17/36] hw/char/pci-multi: Convert legacy qemu_allocate_irqs to qemu_init_irq, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 18/36] hw/misc/i2c-echo: add tracing, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 19/36] hw/usb/hcd-ehci: Fix debug printf format string, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 20/36] hw/avr/boot: Replace load_elf_ram_sym() -> load_elf_as(), Philippe Mathieu-Daudé, 2025/01/31
- [PULL 21/36] hw/loader: Remove unused load_elf_ram(), Philippe Mathieu-Daudé, 2025/01/31
- [PULL 22/36] hw/loader: Clarify local variable name in load_elf_ram_sym(), Philippe Mathieu-Daudé, 2025/01/31
- [PULL 23/36] hw/loader: Pass ELFDATA endian order argument to load_elf_ram_sym(), Philippe Mathieu-Daudé, 2025/01/31
- [PULL 24/36] hw/loader: Pass ELFDATA endian order argument to load_elf_as(),
Philippe Mathieu-Daudé <=
- [PULL 25/36] hw/loader: Pass ELFDATA endian order argument to load_elf(), Philippe Mathieu-Daudé, 2025/01/31
- [PULL 26/36] hw/sd/omap_mmc: Do a minimal conversion to QDev, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 27/36] hw/sd/omap_mmc: Convert remaining 'struct omap_mmc_s' uses to OMAPMMCState, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 28/36] hw/sd/omap_mmc: Convert output qemu_irqs to gpio and sysbus IRQ APIs, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 31/36] hw/arm/omap1: Inline creation of MMC, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 32/36] hw/sd/omap_mmc: Remove unused coverswitch qemu_irq, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 29/36] hw/sd/omap_mmc: Convert to SDBus API, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 30/36] hw/sd/omap_mmc: Use similar API for "wire up omap_clk" to other OMAP devices, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 33/36] hw/sd/omap_mmc: Untabify, Philippe Mathieu-Daudé, 2025/01/31
- [PULL 34/36] hw/sd: Remove unused 'enable' method from SDCardClass, Philippe Mathieu-Daudé, 2025/01/31