diff options
author | Ilya Leoshkevich <iii@linux.ibm.com> | 2022-08-17 17:05:05 +0200 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2022-09-06 08:04:26 +0100 |
commit | 950936681f322a5ba2813f83eb44dd972be2d5a3 (patch) | |
tree | 3604bd255a8d080cbd13b901926b8e6318777ba5 /replay/replay-internal.c | |
parent | ab12c95d3f1999648d70bca54ebcc0588a07dd3e (diff) |
target/i386: Make translator stop before the end of a page
Right now translator stops right *after* the end of a page, which
breaks reporting of fault locations when the last instruction of a
multi-insn translation block crosses a page boundary.
An implementation, like the one arm and s390x have, would require an
i386 length disassembler, which is burdensome to maintain. Another
alternative would be to single-step at the end of a guest page, but
this may come with a performance impact.
Fix by snapshotting disassembly state and restoring it after we figure
out we crossed a page boundary. This includes rolling back cc_op
updates and emitted ops.
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1143
Message-Id: <20220817150506.592862-4-iii@linux.ibm.com>
[rth: Simplify end-of-insn cross-page checks.]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'replay/replay-internal.c')
0 files changed, 0 insertions, 0 deletions