Hi,
This is a follow-up to the eret patch I posted on Friday:
https://lists.nongnu.org/archive/html/qemu-devel/2017-07/msg01831.html
It fixes the same bug but does it in a slightly more holistic way. We
start by expanding the commentary on the common DISAS_n exit flags in
exec-all.h. I then update ARMs usage of DISAS_UPDATE to:
- explicitly exit the run-loop (and not fall-through to DISAS_JUMP)
- make setting the PC optional (as helpers may set it)
I then get rid of the architecture specific hack DISAS_EXIT and use
DISAS_UPDATE for all the eret paths.
Please review.
Alex Bennée (6):
include/exec/exec-all: document common exit conditions
target/arm/translate.c: make DISAS_UPDATE match declared semantics
target/arm/translate-a64: make DISAS_UPDATE match declared semantics
target/arm/translate-a64: get rid of DISAS_EXIT
target/arm: use DISAS_JUMP for ISB handling
target/arm: ensure eret exits the run-loop via DISAS_UPDATE
include/exec/exec-all.h | 29 ++++++++++++++++++++++++++---
target/arm/translate-a64.c | 21 +++++++++++----------
target/arm/translate.c | 36 ++++++++++++++++++++++++++----------
target/arm/translate.h | 4 ----
4 files changed, 63 insertions(+), 27 deletions(-)
--
2.13.0