Skip to content

Commit

Permalink
loader: Add data swap option to load-elf
Browse files Browse the repository at this point in the history
Some CPUs are of an opposite data-endianness to other components in the
system. Sometimes elfs have the data sections layed out with this CPU
data-endianness accounting for when loaded via the CPU, so byte swaps
(relative to other system components) will occur.

The leading example, is ARM's BE32 mode, which is is basically LE with
address manipulation on half-word and byte accesses to access the
hw/byte reversed address. This means that word data is invariant
across LE and BE32. This also means that instructions are still LE.
The expectation is that the elf will be loaded via the CPU in this
endianness scheme, which means the data in the elf is reversed at
compile time.

As QEMU loads via the system memory directly, rather than the CPU, we
need a mechanism to reverse elf data endianness to implement this
possibility.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
pcrost authored and pm215 committed Mar 4, 2016
1 parent 140b7ce commit 7ef295e
Show file tree
Hide file tree
Showing 34 changed files with 81 additions and 46 deletions.
4 changes: 2 additions & 2 deletions hw/alpha/dp264.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ static void clipper_init(MachineState *machine)
}
size = load_elf(palcode_filename, cpu_alpha_superpage_to_phys,
NULL, &palcode_entry, &palcode_low, &palcode_high,
0, EM_ALPHA, 0);
0, EM_ALPHA, 0, 0);
if (size < 0) {
error_report("could not load palcode '%s'", palcode_filename);
exit(1);
Expand All @@ -131,7 +131,7 @@ static void clipper_init(MachineState *machine)

size = load_elf(kernel_filename, cpu_alpha_superpage_to_phys,
NULL, &kernel_entry, &kernel_low, &kernel_high,
0, EM_ALPHA, 0);
0, EM_ALPHA, 0, 0);
if (size < 0) {
error_report("could not load kernel '%s'", kernel_filename);
exit(1);
Expand Down
2 changes: 1 addition & 1 deletion hw/arm/armv7m.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ DeviceState *armv7m_init(MemoryRegion *system_memory, int mem_size, int num_irq,

if (kernel_filename) {
image_size = load_elf(kernel_filename, NULL, NULL, &entry, &lowaddr,
NULL, big_endian, EM_ARM, 1);
NULL, big_endian, EM_ARM, 1, 0);
if (image_size < 0) {
image_size = load_image_targphys(kernel_filename, 0, mem_size);
lowaddr = 0;
Expand Down
2 changes: 1 addition & 1 deletion hw/arm/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -755,7 +755,7 @@ static void arm_load_kernel_notify(Notifier *notifier, void *data)
/* Assume that raw images are linux kernels, and ELF images are not. */
kernel_size = load_elf(info->kernel_filename, NULL, NULL, &elf_entry,
&elf_low_addr, &elf_high_addr, big_endian,
elf_machine, 1);
elf_machine, 1, 0);
if (kernel_size > 0 && have_dtb(info)) {
/* If there is still some room left at the base of RAM, try and put
* the DTB there like we do for images loaded with -bios or -pflash.
Expand Down
9 changes: 6 additions & 3 deletions hw/core/loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,8 @@ void load_elf_hdr(const char *filename, void *hdr, bool *is64, Error **errp)
/* return < 0 if error, otherwise the number of bytes loaded in memory */
int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t),
void *translate_opaque, uint64_t *pentry, uint64_t *lowaddr,
uint64_t *highaddr, int big_endian, int elf_machine, int clear_lsb)
uint64_t *highaddr, int big_endian, int elf_machine,
int clear_lsb, int data_swab)
{
int fd, data_order, target_data_order, must_swab, ret = ELF_LOAD_FAILED;
uint8_t e_ident[EI_NIDENT];
Expand Down Expand Up @@ -451,10 +452,12 @@ int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t),
lseek(fd, 0, SEEK_SET);
if (e_ident[EI_CLASS] == ELFCLASS64) {
ret = load_elf64(filename, fd, translate_fn, translate_opaque, must_swab,
pentry, lowaddr, highaddr, elf_machine, clear_lsb);
pentry, lowaddr, highaddr, elf_machine, clear_lsb,
data_swab);
} else {
ret = load_elf32(filename, fd, translate_fn, translate_opaque, must_swab,
pentry, lowaddr, highaddr, elf_machine, clear_lsb);
pentry, lowaddr, highaddr, elf_machine, clear_lsb,
data_swab);
}

fail:
Expand Down
2 changes: 1 addition & 1 deletion hw/cris/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ void cris_load_image(CRISCPU *cpu, struct cris_load_info *li)
/* Boots a kernel elf binary, os/linux-2.6/vmlinux from the axis
devboard SDK. */
image_size = load_elf(li->image_filename, translate_kernel_address, NULL,
&entry, NULL, &high, 0, EM_CRIS, 0);
&entry, NULL, &high, 0, EM_CRIS, 0, 0);
li->entry = entry;
if (image_size < 0) {
/* Takes a kimage from the axis devboard SDK. */
Expand Down
3 changes: 2 additions & 1 deletion hw/i386/multiboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,8 @@ int load_multiboot(FWCfgState *fw_cfg,
}

kernel_size = load_elf(kernel_filename, NULL, NULL, &elf_entry,
&elf_low, &elf_high, 0, I386_ELF_MACHINE, 0);
&elf_low, &elf_high, 0, I386_ELF_MACHINE,
0, 0);
if (kernel_size < 0) {
fprintf(stderr, "Error while loading elf kernel\n");
exit(1);
Expand Down
4 changes: 2 additions & 2 deletions hw/lm32/lm32_boards.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ static void lm32_evr_init(MachineState *machine)
int kernel_size;

kernel_size = load_elf(kernel_filename, NULL, NULL, &entry, NULL, NULL,
1, EM_LATTICEMICO32, 0);
1, EM_LATTICEMICO32, 0, 0);
reset_info->bootstrap_pc = entry;

if (kernel_size < 0) {
Expand Down Expand Up @@ -245,7 +245,7 @@ static void lm32_uclinux_init(MachineState *machine)
int kernel_size;

kernel_size = load_elf(kernel_filename, NULL, NULL, &entry, NULL, NULL,
1, EM_LATTICEMICO32, 0);
1, EM_LATTICEMICO32, 0, 0);
reset_info->bootstrap_pc = entry;

if (kernel_size < 0) {
Expand Down
2 changes: 1 addition & 1 deletion hw/lm32/milkymist.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ milkymist_init(MachineState *machine)

/* Boots a kernel elf binary. */
kernel_size = load_elf(kernel_filename, NULL, NULL, &entry, NULL, NULL,
1, EM_LATTICEMICO32, 0);
1, EM_LATTICEMICO32, 0, 0);
reset_info->bootstrap_pc = entry;

if (kernel_size < 0) {
Expand Down
2 changes: 1 addition & 1 deletion hw/m68k/an5206.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ static void an5206_init(MachineState *machine)
}

kernel_size = load_elf(kernel_filename, NULL, NULL, &elf_entry,
NULL, NULL, 1, EM_68K, 0);
NULL, NULL, 1, EM_68K, 0, 0);
entry = elf_entry;
if (kernel_size < 0) {
kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL,
Expand Down
2 changes: 1 addition & 1 deletion hw/m68k/dummy_m68k.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ static void dummy_m68k_init(MachineState *machine)
/* Load kernel. */
if (kernel_filename) {
kernel_size = load_elf(kernel_filename, NULL, NULL, &elf_entry,
NULL, NULL, 1, EM_68K, 0);
NULL, NULL, 1, EM_68K, 0, 0);
entry = elf_entry;
if (kernel_size < 0) {
kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL,
Expand Down
2 changes: 1 addition & 1 deletion hw/m68k/mcf5208.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ static void mcf5208evb_init(MachineState *machine)
}

kernel_size = load_elf(kernel_filename, NULL, NULL, &elf_entry,
NULL, NULL, 1, EM_68K, 0);
NULL, NULL, 1, EM_68K, 0, 0);
entry = elf_entry;
if (kernel_size < 0) {
kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL,
Expand Down
4 changes: 2 additions & 2 deletions hw/microblaze/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,12 +142,12 @@ void microblaze_load_kernel(MicroBlazeCPU *cpu, hwaddr ddr_base,
/* Boots a kernel elf binary. */
kernel_size = load_elf(kernel_filename, NULL, NULL,
&entry, &low, &high,
big_endian, EM_MICROBLAZE, 0);
big_endian, EM_MICROBLAZE, 0, 0);
base32 = entry;
if (base32 == 0xc0000000) {
kernel_size = load_elf(kernel_filename, translate_kernel_address,
NULL, &entry, NULL, NULL,
big_endian, EM_MICROBLAZE, 0);
big_endian, EM_MICROBLAZE, 0, 0);
}
/* Always boot into physical ram. */
boot_info.bootstrap_pc = (uint32_t)entry;
Expand Down
2 changes: 1 addition & 1 deletion hw/mips/mips_fulong2e.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ static int64_t load_kernel (CPUMIPSState *env)

if (load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, NULL,
(uint64_t *)&kernel_entry, (uint64_t *)&kernel_low,
(uint64_t *)&kernel_high, 0, EM_MIPS, 1) < 0) {
(uint64_t *)&kernel_high, 0, EM_MIPS, 1, 0) < 0) {
fprintf(stderr, "qemu: could not load kernel '%s'\n",
loaderparams.kernel_filename);
exit(1);
Expand Down
2 changes: 1 addition & 1 deletion hw/mips/mips_malta.c
Original file line number Diff line number Diff line change
Expand Up @@ -796,7 +796,7 @@ static int64_t load_kernel (void)

if (load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, NULL,
(uint64_t *)&kernel_entry, NULL, (uint64_t *)&kernel_high,
big_endian, EM_MIPS, 1) < 0) {
big_endian, EM_MIPS, 1, 0) < 0) {
fprintf(stderr, "qemu: could not load kernel '%s'\n",
loaderparams.kernel_filename);
exit(1);
Expand Down
2 changes: 1 addition & 1 deletion hw/mips/mips_mipssim.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ static int64_t load_kernel(void)
kernel_size = load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys,
NULL, (uint64_t *)&entry, NULL,
(uint64_t *)&kernel_high, big_endian,
EM_MIPS, 1);
EM_MIPS, 1, 0);
if (kernel_size >= 0) {
if ((entry & ~0x7fffffffULL) == 0x80000000)
entry = (int32_t)entry;
Expand Down
2 changes: 1 addition & 1 deletion hw/mips/mips_r4k.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ static int64_t load_kernel(void)
kernel_size = load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys,
NULL, (uint64_t *)&entry, NULL,
(uint64_t *)&kernel_high, big_endian,
EM_MIPS, 1);
EM_MIPS, 1, 0);
if (kernel_size >= 0) {
if ((entry & ~0x7fffffffULL) == 0x80000000)
entry = (int32_t)entry;
Expand Down
3 changes: 2 additions & 1 deletion hw/moxie/moxiesim.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ static void load_kernel(MoxieCPU *cpu, LoaderParams *loader_params)
ram_addr_t initrd_offset;

kernel_size = load_elf(loader_params->kernel_filename, NULL, NULL,
&entry, &kernel_low, &kernel_high, 1, EM_MOXIE, 0);
&entry, &kernel_low, &kernel_high, 1, EM_MOXIE,
0, 0);

if (kernel_size <= 0) {
fprintf(stderr, "qemu: could not load kernel '%s'\n",
Expand Down
3 changes: 2 additions & 1 deletion hw/openrisc/openrisc_sim.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ static void cpu_openrisc_load_kernel(ram_addr_t ram_size,

if (kernel_filename && !qtest_enabled()) {
kernel_size = load_elf(kernel_filename, NULL, NULL,
&elf_entry, NULL, NULL, 1, EM_OPENRISC, 1);
&elf_entry, NULL, NULL, 1, EM_OPENRISC,
1, 0);
entry = elf_entry;
if (kernel_size < 0) {
kernel_size = load_uimage(kernel_filename,
Expand Down
2 changes: 1 addition & 1 deletion hw/pci-host/prep.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ static void raven_realize(PCIDevice *d, Error **errp)
if (filename) {
if (s->elf_machine != EM_NONE) {
bios_size = load_elf(filename, NULL, NULL, NULL,
NULL, NULL, 1, s->elf_machine, 0);
NULL, NULL, 1, s->elf_machine, 0, 0);
}
if (bios_size < 0) {
bios_size = get_image_size(filename);
Expand Down
2 changes: 1 addition & 1 deletion hw/ppc/e500.c
Original file line number Diff line number Diff line change
Expand Up @@ -1017,7 +1017,7 @@ void ppce500_init(MachineState *machine, PPCE500Params *params)
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);

bios_size = load_elf(filename, NULL, NULL, &bios_entry, &loadaddr, NULL,
1, PPC_ELF_MACHINE, 0);
1, PPC_ELF_MACHINE, 0, 0);
if (bios_size < 0) {
/*
* Hrm. No ELF image? Try a uImage, maybe someone is giving us an
Expand Down
5 changes: 3 additions & 2 deletions hw/ppc/mac_newworld.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ static void ppc_core99_init(MachineState *machine)
/* Load OpenBIOS (ELF) */
if (filename) {
bios_size = load_elf(filename, NULL, NULL, NULL,
NULL, NULL, 1, PPC_ELF_MACHINE, 0);
NULL, NULL, 1, PPC_ELF_MACHINE, 0, 0);

g_free(filename);
} else {
Expand All @@ -244,7 +244,8 @@ static void ppc_core99_init(MachineState *machine)
kernel_base = KERNEL_LOAD_ADDR;

kernel_size = load_elf(kernel_filename, translate_kernel_address, NULL,
NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE, 0);
NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE,
0, 0);
if (kernel_size < 0)
kernel_size = load_aout(kernel_filename, kernel_base,
ram_size - kernel_base, bswap_needed,
Expand Down
5 changes: 3 additions & 2 deletions hw/ppc/mac_oldworld.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ static void ppc_heathrow_init(MachineState *machine)
/* Load OpenBIOS (ELF) */
if (filename) {
bios_size = load_elf(filename, 0, NULL, NULL, NULL, NULL,
1, PPC_ELF_MACHINE, 0);
1, PPC_ELF_MACHINE, 0, 0);
g_free(filename);
} else {
bios_size = -1;
Expand All @@ -170,7 +170,8 @@ static void ppc_heathrow_init(MachineState *machine)
#endif
kernel_base = KERNEL_LOAD_ADDR;
kernel_size = load_elf(kernel_filename, translate_kernel_address, NULL,
NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE, 0);
NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE,
0, 0);
if (kernel_size < 0)
kernel_size = load_aout(kernel_filename, kernel_base,
ram_size - kernel_base, bswap_needed,
Expand Down
3 changes: 2 additions & 1 deletion hw/ppc/ppc440_bamboo.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,8 @@ static void bamboo_init(MachineState *machine)
NULL, NULL);
if (success < 0) {
success = load_elf(kernel_filename, NULL, NULL, &elf_entry,
&elf_lowaddr, NULL, 1, PPC_ELF_MACHINE, 0);
&elf_lowaddr, NULL, 1, PPC_ELF_MACHINE,
0, 0);
entry = elf_entry;
loadaddr = elf_lowaddr;
}
Expand Down
6 changes: 4 additions & 2 deletions hw/ppc/spapr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1942,11 +1942,13 @@ static void ppc_spapr_init(MachineState *machine)
uint64_t lowaddr = 0;

kernel_size = load_elf(kernel_filename, translate_kernel_address, NULL,
NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE, 0);
NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE,
0, 0);
if (kernel_size == ELF_LOAD_WRONG_ENDIAN) {
kernel_size = load_elf(kernel_filename,
translate_kernel_address, NULL,
NULL, &lowaddr, NULL, 0, PPC_ELF_MACHINE, 0);
NULL, &lowaddr, NULL, 0, PPC_ELF_MACHINE,
0, 0);
kernel_le = kernel_size > 0;
}
if (kernel_size < 0) {
Expand Down
3 changes: 2 additions & 1 deletion hw/ppc/virtex_ml507.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,8 @@ static void virtex_init(MachineState *machine)

/* Boots a kernel elf binary. */
kernel_size = load_elf(kernel_filename, NULL, NULL,
&entry, &low, &high, 1, PPC_ELF_MACHINE, 0);
&entry, &low, &high, 1, PPC_ELF_MACHINE,
0, 0);
boot_info.bootstrap_pc = entry & 0x00ffffff;

if (kernel_size < 0) {
Expand Down
4 changes: 2 additions & 2 deletions hw/s390x/ipl.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)

bios_size = load_elf(bios_filename, bios_translate_addr, &fwbase,
&ipl->bios_start_addr, NULL, NULL, 1,
EM_S390, 0);
EM_S390, 0, 0);
if (bios_size > 0) {
/* Adjust ELF start address to final location */
ipl->bios_start_addr += fwbase;
Expand All @@ -124,7 +124,7 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)

if (ipl->kernel) {
kernel_size = load_elf(ipl->kernel, NULL, NULL, &pentry, NULL,
NULL, 1, EM_S390, 0);
NULL, 1, EM_S390, 0, 0);
if (kernel_size < 0) {
kernel_size = load_image_targphys(ipl->kernel, 0, ram_size);
}
Expand Down
2 changes: 1 addition & 1 deletion hw/sparc/leon3.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ static void leon3_generic_hw_init(MachineState *machine)
uint64_t entry;

kernel_size = load_elf(kernel_filename, NULL, NULL, &entry, NULL, NULL,
1 /* big endian */, EM_SPARC, 0);
1 /* big endian */, EM_SPARC, 0, 0);
if (kernel_size < 0) {
fprintf(stderr, "qemu: could not load kernel '%s'\n",
kernel_filename);
Expand Down
4 changes: 2 additions & 2 deletions hw/sparc/sun4m.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ static unsigned long sun4m_load_kernel(const char *kernel_filename,
bswap_needed = 0;
#endif
kernel_size = load_elf(kernel_filename, translate_kernel_address, NULL,
NULL, NULL, NULL, 1, EM_SPARC, 0);
NULL, NULL, NULL, 1, EM_SPARC, 0, 0);
if (kernel_size < 0)
kernel_size = load_aout(kernel_filename, KERNEL_LOAD_ADDR,
RAM_size - KERNEL_LOAD_ADDR, bswap_needed,
Expand Down Expand Up @@ -723,7 +723,7 @@ static void prom_init(hwaddr addr, const char *bios_name)
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
if (filename) {
ret = load_elf(filename, translate_prom_address, &addr, NULL,
NULL, NULL, 1, EM_SPARC, 0);
NULL, NULL, 1, EM_SPARC, 0, 0);
if (ret < 0 || ret > PROM_SIZE_MAX) {
ret = load_image_targphys(filename, addr, PROM_SIZE_MAX);
}
Expand Down
4 changes: 2 additions & 2 deletions hw/sparc64/sun4u.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ static uint64_t sun4u_load_kernel(const char *kernel_filename,
bswap_needed = 0;
#endif
kernel_size = load_elf(kernel_filename, NULL, NULL, kernel_entry,
kernel_addr, &kernel_top, 1, EM_SPARCV9, 0);
kernel_addr, &kernel_top, 1, EM_SPARCV9, 0, 0);
if (kernel_size < 0) {
*kernel_addr = KERNEL_LOAD_ADDR;
*kernel_entry = KERNEL_LOAD_ADDR;
Expand Down Expand Up @@ -633,7 +633,7 @@ static void prom_init(hwaddr addr, const char *bios_name)
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
if (filename) {
ret = load_elf(filename, translate_prom_address, &addr,
NULL, NULL, NULL, 1, EM_SPARCV9, 0);
NULL, NULL, NULL, 1, EM_SPARCV9, 0, 0);
if (ret < 0 || ret > PROM_SIZE_MAX) {
ret = load_image_targphys(filename, addr, PROM_SIZE_MAX);
}
Expand Down
2 changes: 1 addition & 1 deletion hw/tricore/tricore_testboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ static void tricore_load_kernel(CPUTriCoreState *env)
kernel_size = load_elf(tricoretb_binfo.kernel_filename, NULL,
NULL, (uint64_t *)&entry, NULL,
NULL, 0,
EM_TRICORE, 1);
EM_TRICORE, 1, 0);
if (kernel_size <= 0) {
error_report("qemu: no kernel file '%s'",
tricoretb_binfo.kernel_filename);
Expand Down
4 changes: 2 additions & 2 deletions hw/xtensa/sim.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,10 @@ static void xtensa_sim_init(MachineState *machine)
uint64_t elf_lowaddr;
#ifdef TARGET_WORDS_BIGENDIAN
int success = load_elf(kernel_filename, translate_phys_addr, cpu,
&elf_entry, &elf_lowaddr, NULL, 1, EM_XTENSA, 0);
&elf_entry, &elf_lowaddr, NULL, 1, EM_XTENSA, 0, 0);
#else
int success = load_elf(kernel_filename, translate_phys_addr, cpu,
&elf_entry, &elf_lowaddr, NULL, 0, EM_XTENSA, 0);
&elf_entry, &elf_lowaddr, NULL, 0, EM_XTENSA, 0, 0);
#endif
if (success > 0) {
env->pc = elf_entry;
Expand Down
2 changes: 1 addition & 1 deletion hw/xtensa/xtfpga.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ static void lx_init(const LxBoardDesc *board, MachineState *machine)
uint64_t elf_entry;
uint64_t elf_lowaddr;
int success = load_elf(kernel_filename, translate_phys_addr, cpu,
&elf_entry, &elf_lowaddr, NULL, be, EM_XTENSA, 0);
&elf_entry, &elf_lowaddr, NULL, be, EM_XTENSA, 0, 0);
if (success > 0) {
entry_point = elf_entry;
} else {
Expand Down
Loading

0 comments on commit 7ef295e

Please sign in to comment.