diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2023-12-12 09:01:38 -0800 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2023-12-12 13:35:08 -0800 |
commit | b5e0d5d22fbffc3d8f7d3e86d7a2d05a1a974e27 (patch) | |
tree | 4e1e2d76e205d513dde01b6fe99ed71f745b63d3 /qapi/string-output-visitor.c | |
parent | 9c74490bff6c8886a922008d0c9ce6cae70dd17e (diff) |
target/i386: Fix 32-bit wrapping of pc/eip computation
In 32-bit mode, pc = eip + cs_base is also 32-bit, and must wrap.
Failure to do so results in incorrect memory exceptions to the guest.
Before 732d548732ed, this was implicitly done via truncation to
target_ulong but only in qemu-system-i386, not qemu-system-x86_64.
To fix this, we must add conditional zero-extensions.
Since we have to test for 32 vs 64-bit anyway, note that cs_base
is always zero in 64-bit mode.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2022
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20231212172510.103305-1-richard.henderson@linaro.org>
Diffstat (limited to 'qapi/string-output-visitor.c')
0 files changed, 0 insertions, 0 deletions