Hi All, This patch series adds system-mode big-endian support for ARM. It also implements the setend instruction, and loading of BE binaries even in LE emulation mode.
Based on Paolo's original work. I have moved all the BE32 related work to the back of the series. Multiple parties are interested in the BE8 work just on its own, so that could potentially be merged w/o BE32. PMM requested BE32 be at least thought out architecturally, so this series sees BE32 functionality through. I have tested all of LE. BE8 and BE32 in both linux-user mode (for regressions) and system mode (BE8 and BE32 are new here). My test application is here, the README gives some example command lines you can run: https://github.com/pcrost/arm-be-test Regards, Peter Paolo Bonzini (8): linux-user: arm: fix coding style for some linux-user signal functions linux-user: arm: handle CPSR.E correctly in strex emulation target-arm: pass DisasContext to gen_aa32_ld*/st* target-arm: introduce disas flag for endianness target-arm: implement setend linux-user: arm: pass env to get_user_code_* target-arm: implement SCTLR.B, drop bswap_code target-arm: implement BE32 mode in system emulation Peter Crosthwaite (9): linux-user: arm: set CPSR.E/SCTLR.E0E correctly for BE mode target-arm: implement SCTLR.EE target-arm: a64: Add endianness support target-arm: cpu: Move cpu_is_big_endian to header target-arm: introduce tbflag for endianness arm: linux-user: don't set CPSR.E in BE32 mode loader: add API to load elf header loader: Add data swap option to load-elf arm: boot: Support big-endian elfs hw/alpha/dp264.c | 4 +- hw/arm/armv7m.c | 2 +- hw/arm/boot.c | 96 ++++++++-- hw/core/loader.c | 57 +++++- hw/cris/boot.c | 2 +- hw/i386/multiboot.c | 3 +- hw/lm32/lm32_boards.c | 4 +- hw/lm32/milkymist.c | 2 +- hw/m68k/an5206.c | 2 +- hw/m68k/dummy_m68k.c | 2 +- hw/m68k/mcf5208.c | 2 +- hw/microblaze/boot.c | 4 +- hw/mips/mips_fulong2e.c | 2 +- hw/mips/mips_malta.c | 2 +- hw/mips/mips_mipssim.c | 2 +- hw/mips/mips_r4k.c | 2 +- hw/moxie/moxiesim.c | 3 +- hw/openrisc/openrisc_sim.c | 3 +- hw/pci-host/prep.c | 2 +- hw/ppc/e500.c | 2 +- hw/ppc/mac_newworld.c | 5 +- hw/ppc/mac_oldworld.c | 5 +- hw/ppc/ppc440_bamboo.c | 3 +- hw/ppc/spapr.c | 6 +- hw/ppc/virtex_ml507.c | 3 +- hw/s390x/ipl.c | 4 +- hw/sparc/leon3.c | 2 +- hw/sparc/sun4m.c | 4 +- hw/sparc64/sun4u.c | 4 +- hw/tricore/tricore_testboard.c | 2 +- hw/xtensa/sim.c | 4 +- hw/xtensa/xtfpga.c | 2 +- include/hw/arm/arm.h | 9 + include/hw/elf_ops.h | 22 ++- include/hw/loader.h | 3 +- linux-user/main.c | 77 ++++++-- linux-user/signal.c | 110 +++++------ target-arm/arm_ldst.h | 8 +- target-arm/cpu.c | 21 +-- target-arm/cpu.h | 103 ++++++++++- target-arm/helper.c | 50 +++-- target-arm/helper.h | 1 + target-arm/op_helper.c | 5 + target-arm/translate-a64.c | 56 +++--- target-arm/translate.c | 407 ++++++++++++++++++++++++----------------- target-arm/translate.h | 3 +- 46 files changed, 752 insertions(+), 365 deletions(-) -- 1.9.1