Commit 56bd0977df for qemu.org
commit 56bd0977df6102f9c04ab2a92176ff250bbe9711
Author: Mohamed Mediouni <mohamed@unpredictable.fr>
Date: Wed Apr 22 23:42:14 2026 +0200
target/i386: emulate: use exception_payload for fault address
Instead of directly putting it in cr[2], put it in exception_payload.
Signed-off-by: Mohamed Mediouni <mohamed@unpredictable.fr>
Link: https://lore.kernel.org/r/20260422214225.2242-27-mohamed@unpredictable.fr
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/target/i386/emulate/x86_mmu.c b/target/i386/emulate/x86_mmu.c
index 007de582de..8d4371467f 100644
--- a/target/i386/emulate/x86_mmu.c
+++ b/target/i386/emulate/x86_mmu.c
@@ -277,7 +277,8 @@ static MMUTranslateResult x86_write_mem_ex(CPUState *cpu, void *data, target_ulo
translate_res = mmu_gva_to_gpa(cpu, gva, &gpa, translate_flags);
if (translate_res) {
int error_code = translate_res_to_error_code(translate_res, true, is_user(cpu));
- env->cr[2] = gva;
+ env->exception_has_payload = 1;
+ env->exception_payload = gva;
x86_emul_raise_exception(env, EXCP0E_PAGE, error_code);
return translate_res;
}
diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c
index 25ace38ff6..8d8aabf4db 100644
--- a/target/i386/whpx/whpx-all.c
+++ b/target/i386/whpx/whpx-all.c
@@ -1891,11 +1891,11 @@ static void whpx_inject_exceptions(CPUState* cpu)
WHV_REGISTER_VALUE reg = {};
reg.ExceptionEvent.EventPending = 1;
reg.ExceptionEvent.EventType = WHvX64PendingEventException;
- reg.ExceptionEvent.DeliverErrorCode = 1;
+ reg.ExceptionEvent.DeliverErrorCode = env->has_error_code;
reg.ExceptionEvent.Vector = env->exception_nr;
reg.ExceptionEvent.ErrorCode = env->error_code;
- if (env->exception_nr == EXCP0E_PAGE) {
- reg.ExceptionEvent.ExceptionParameter = env->cr[2];
+ if (env->exception_has_payload) {
+ reg.ExceptionEvent.ExceptionParameter = env->exception_payload;
}
whpx_set_reg(cpu, WHvRegisterPendingEvent, reg);
}