unicorn/qemu/target-arm
Sergey Fedorov 23ece1622c
target-arm: Clean up DISAS_UPDATE usage in AArch32 translation code
AArch32 translation code does not distinguish between DISAS_UPDATE and
DISAS_JUMP. Thus, we cannot use any of them without first updating PC in
CPU state. Furthermore, it is too complicated to update PC in CPU state
before PC gets updated in disas context. So it is hardly possible to
correctly end TB early if is is not likely to be executed before calling
disas_*_insn(), e.g. just after calling breakpoint check helper.

Modify DISAS_UPDATE and DISAS_JUMP usage in AArch32 translation and
apply to them the same semantic as AArch64 translation does:
- DISAS_UPDATE: update PC in CPU state when finishing translation
- DISAS_JUMP: preserve current PC value in CPU state when finishing
translation

This patch fixes a bug in AArch32 breakpoint handling: when
check_breakpoints helper does not generate an exception, ending the TB
early with DISAS_UPDATE couldn't update PC in CPU state and execution
hangs.

Backports commit 577bf808958d06497928c639efaa473bf8c5e099 from qemu
2018-02-17 17:43:21 -05:00
..
arm_ldst.h import 2015-08-21 15:04:50 +08:00
cpu-qom.h target-arm: Refactor CPU affinity handling 2018-02-17 15:23:34 -05:00
cpu.c target-arm: Refactor CPU affinity handling 2018-02-17 15:23:34 -05:00
cpu.h target-arm: Add HPFAR_EL2 2018-02-17 15:24:07 -05:00
cpu64.c target-arm: Fix REVIDR reset value 2018-02-13 14:24:08 -05:00
crypto_helper.c crypto: move built-in AES implementation into crypto/ 2018-02-17 15:23:17 -05:00
helper-a64.c target-arm: Log the target EL when taking exceptions 2018-02-17 15:23:36 -05:00
helper-a64.h import 2015-08-21 15:04:50 +08:00
helper.c target-arm: Add support for S1 + S2 MMU translations 2018-02-17 15:24:10 -05:00
helper.h target-arm: Fix CPU breakpoint handling 2018-02-17 15:24:02 -05:00
internals.h target-arm: Add ARMMMUFaultInfo 2018-02-17 15:24:09 -05:00
iwmmxt_helper.c import 2015-08-21 15:04:50 +08:00
kvm-consts.h import 2015-08-21 15:04:50 +08:00
Makefile.objs delete sparc32_dma.h & arm-semi.c 2017-01-19 15:10:41 +08:00
neon_helper.c Arm support ported. (#736) 2017-01-23 23:30:57 +08:00
op_addsub.h import 2015-08-21 15:04:50 +08:00
op_helper.c target-arm: Fix gdb singlestep handling in arm_debug_excp_handler() 2018-02-17 17:32:27 -05:00
psci.c import 2015-08-21 15:04:50 +08:00
translate-a64.c target-arm: Report S/NS status in the CPU debug logs 2018-02-17 15:24:14 -05:00
translate.c target-arm: Clean up DISAS_UPDATE usage in AArch32 translation code 2018-02-17 17:43:21 -05:00
translate.h tcg: Remove gen_intermediate_code_pc 2018-02-17 15:23:59 -05:00
unicorn.h arm64eb: add support for ARM64 big endian. 2017-04-24 23:30:01 +08:00
unicorn_aarch64.c target-arm: rename c1_coproc to cpacr_el1 2018-02-12 20:46:00 -05:00
unicorn_arm.c target-arm: Add registers for PMSAv7 2018-02-17 15:22:43 -05:00