diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2009-09-17 20:05:58 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-10-05 09:32:45 -0500 |
commit | b3807725f6540f9f2f02ce040c85df2f69cba080 (patch) | |
tree | 00cbc6f07d556ef53fcb47e223054387387183a2 | |
parent | 5f30fa18ad043a841fe9f0c3917ac60f2519ebd1 (diff) | |
download | qemu-b3807725f6540f9f2f02ce040c85df2f69cba080.tar.gz qemu-b3807725f6540f9f2f02ce040c85df2f69cba080.tar.bz2 qemu-b3807725f6540f9f2f02ce040c85df2f69cba080.zip |
kvm: Fix guest single-stepping
Hopefully the last regression of 4c0960c0: KVM_SET_GUEST_DEBUG requires
properly synchronized guest registers (on x86: eflags) on entry.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r-- | kvm-all.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -938,7 +938,13 @@ struct kvm_set_guest_debug_data { static void kvm_invoke_set_guest_debug(void *data) { struct kvm_set_guest_debug_data *dbg_data = data; - dbg_data->err = kvm_vcpu_ioctl(dbg_data->env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg); + CPUState *env = dbg_data->env; + + if (env->kvm_state->regs_modified) { + kvm_arch_put_registers(env); + env->kvm_state->regs_modified = 0; + } + dbg_data->err = kvm_vcpu_ioctl(env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg); } int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap) |