]> git.proxmox.com Git - mirror_qemu.git/commit - disas.c
Fix Thumb-1 BE32 execution and disassembly.
authorJulian Brown <julian@codesourcery.com>
Tue, 7 Feb 2017 18:29:59 +0000 (18:29 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 7 Feb 2017 18:29:59 +0000 (18:29 +0000)
commitf7478a92dd9ee2276bfaa5b7317140d3f9d6a53b
treef533aa39ca2f33bb53b6135f93f2072069ad9fae
parent3a062d5730266b2386eeda68b1a1c6e96451db31
Fix Thumb-1 BE32 execution and disassembly.

Thumb-1 code has some issues in BE32 mode (as currently implemented). In
short, since bytes are swapped within words at load time for BE32
executables, this also swaps pairs of adjacent Thumb-1 instructions.

This patch un-swaps those pairs of instructions again, both for execution,
and for disassembly. (The previous version of the patch always read four
bytes in arm_read_memory_func and then extracted the proper two bytes,
in a probably misguided attempt to match the behaviour of actual hardware
as described by e.g. the ARM9TDMI TRM, section 3.3 "Endian effects for
instruction fetches". It's less complicated to just read the correct
two bytes though.)

Signed-off-by: Julian Brown <julian@codesourcery.com>
Message-id: ca20462a044848000370318a8bd41dd0a4ed273f.1484929304.git.julian@codesourcery.com
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
disas.c
include/disas/bfd.h
target/arm/arm_ldst.h
target/arm/cpu.c