qemu-cr16/linux-user/microblaze
Philippe Mathieu-Daudé 91fc6d8101 linux-user/microblaze: Fix little-endianness binary
MicroBlaze CPU model has a "little-endian" property, pointing to
the @endi internal field. Commit c36ec3a965 ("hw/microblaze:
Explicit CPU endianness") took care of having all MicroBlaze
boards with an explicit default endianness, so later commit
415aae543e ("target/microblaze: Consider endianness while
translating code") could infer the endianness at runtime from
the @endi field, and not a compile time via the TARGET_BIG_ENDIAN
definition. Doing so, we forgot to make the endianness explicit
on user emulation, so there all CPUs are started with the default
"little-endian=off" value, leading to breaking support for little
endian binaries:

  $ readelf -h ./hello-world-mbel
  ELF Header:
    Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
    Class:                             ELF32
    Data:                              2's complement, little endian

  $ qemu-microblazeel ./hello-world-mbel
  qemu: uncaught target signal 11 (Segmentation fault) - core dumped
  Segmentation fault (core dumped)

Fix by restoring the previous behavior of starting with the
builtin endianness of the binary:

  $ qemu-microblazeel ./hello-world-mbel
  Hello World

Cc: qemu-stable@nongnu.org
Fixes: 415aae543e ("target/microblaze: Consider endianness while translating code")
Reported-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Message-Id: <20251006173350.17455-1-philmd@linaro.org>
2025-10-16 17:07:52 +02:00
..
cpu_loop.c bsd-user, linux-user: introduce qemu_process_cpu_events 2025-09-17 19:00:56 +02:00
elfload.c linux-user/microblaze: Fix little-endianness binary 2025-10-16 17:07:52 +02:00
meson.build
signal.c linux-user/microblaze: Fold target_pt_regs.r* to an array 2025-08-30 07:04:04 +10:00
sockbits.h
syscall.tbl target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
syscallhdr.sh license: Update deprecated SPDX tag GPL-2.0 to GPL-2.0-only 2024-09-20 10:11:59 +03:00
target_cpu.h linux user: Fix Lesser GPL version number 2020-11-15 16:41:26 +01:00
target_elf.h linux-user: Rename elf_check_arch 2025-08-30 07:04:04 +10:00
target_errno_defs.h linux-user: Extract target errno to 'target_errno_defs.h' 2021-07-12 21:53:35 +02:00
target_fcntl.h
target_flat.h linux-user: move target_flat.h to target subdirs 2023-02-03 22:55:12 +01:00
target_mman.h linux-user: Define ELF_ET_DYN_BASE in $guest/target_mman.h 2023-08-08 13:27:15 -07:00
target_prctl.h linux-user: Split out do_prctl and subroutines 2022-01-06 11:40:52 +01:00
target_proc.h linux-user: Split out cpu/target_proc.h 2023-09-01 13:33:09 -07:00
target_ptrace.h linux-user/microblaze: Fold target_pt_regs.r* to an array 2025-08-30 07:04:04 +10:00
target_resource.h linux-user: Move generic TARGET_RLIMIT* definitions to generic/target_resource.h 2022-02-01 08:01:38 +01:00
target_signal.h linux-user: Move TARGET_SA_RESTORER out of generic/signal.h 2025-02-18 08:29:03 -08:00
target_structs.h linux-user: Move target_struct.h generic definitions to generic/ 2022-01-11 18:40:44 +01:00
target_syscall.h linux-user/microblaze: Create target_ptrace.h 2025-08-30 07:04:04 +10:00
termbits.h linux-user: Add generic 'termbits.h' for some archs 2020-08-27 12:29:50 +02:00