]> git.proxmox.com Git - mirror_qemu.git/commit
target-arm: Break the TB after ISB to execute self-modified code correctly
authorSergey Sorokin <afarallax@yandex.ru>
Fri, 16 Oct 2015 10:14:52 +0000 (11:14 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 16 Oct 2015 10:14:52 +0000 (11:14 +0100)
commit6df99dec9e81838423d723996e96236693fa31fe
tree064423bd751b2305a233d2a30277aa877ffedd95
parent82c39f6a8898b028515eddcdbc4ae50959d0af5d
target-arm: Break the TB after ISB to execute self-modified code correctly

If any store instruction writes the code inside the same TB
after this store insn, the execution of the TB must be stopped
to execute new code correctly.
As described in ARMv8 manual D3.4.6 self-modifying code must do an
IC invalidation to be valid, and an ISB after it. So it's enough to end
the TB after ISB instruction on the code translation.
Also this TB break is necessary to take any pending interrupts immediately
after an ISB (as required by ARMv8 ARM D1.14.4).

Signed-off-by: Sergey Sorokin <afarallax@yandex.ru>
[PMM: tweaked commit message and comments slightly]
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
target-arm/helper.c
target-arm/translate-a64.c
target-arm/translate.c