Revision a78d0eab target-i386/svm_helper.c
b/target-i386/svm_helper.c | ||
---|---|---|
170 | 170 |
&env->segs[R_DS]); |
171 | 171 |
|
172 | 172 |
stq_phys(env->vm_hsave + offsetof(struct vmcb, save.rip), |
173 |
EIP + next_eip_addend);
|
|
173 |
env->eip + next_eip_addend);
|
|
174 | 174 |
stq_phys(env->vm_hsave + offsetof(struct vmcb, save.rsp), env->regs[R_ESP]); |
175 | 175 |
stq_phys(env->vm_hsave + offsetof(struct vmcb, save.rax), env->regs[R_EAX]); |
176 | 176 |
|
... | ... | |
248 | 248 |
svm_load_seg_cache(env, env->vm_vmcb + offsetof(struct vmcb, save.ds), |
249 | 249 |
R_DS); |
250 | 250 |
|
251 |
EIP = ldq_phys(env->vm_vmcb + offsetof(struct vmcb, save.rip));
|
|
252 |
env->eip = EIP;
|
|
251 |
env->eip = ldq_phys(env->vm_vmcb + offsetof(struct vmcb, save.rip));
|
|
252 |
env->eip = env->eip;
|
|
253 | 253 |
env->regs[R_ESP] = ldq_phys(env->vm_vmcb + offsetof(struct vmcb, save.rsp)); |
254 | 254 |
env->regs[R_EAX] = ldq_phys(env->vm_vmcb + offsetof(struct vmcb, save.rax)); |
255 | 255 |
env->dr[7] = ldq_phys(env->vm_vmcb + offsetof(struct vmcb, save.dr7)); |
... | ... | |
302 | 302 |
env->exception_index = EXCP02_NMI; |
303 | 303 |
env->error_code = event_inj_err; |
304 | 304 |
env->exception_is_int = 0; |
305 |
env->exception_next_eip = EIP;
|
|
305 |
env->exception_next_eip = env->eip;
|
|
306 | 306 |
qemu_log_mask(CPU_LOG_TB_IN_ASM, "NMI"); |
307 | 307 |
cpu_loop_exit(env); |
308 | 308 |
break; |
... | ... | |
318 | 318 |
env->exception_index = vector; |
319 | 319 |
env->error_code = event_inj_err; |
320 | 320 |
env->exception_is_int = 1; |
321 |
env->exception_next_eip = EIP;
|
|
321 |
env->exception_next_eip = env->eip;
|
|
322 | 322 |
qemu_log_mask(CPU_LOG_TB_IN_ASM, "SOFT"); |
323 | 323 |
cpu_loop_exit(env); |
324 | 324 |
break; |
... | ... | |
539 | 539 |
uint16_t mask = (1 << ((param >> 4) & 7)) - 1; |
540 | 540 |
|
541 | 541 |
if (lduw_phys(addr + port / 8) & (mask << (port & 7))) { |
542 |
/* next EIP */
|
|
542 |
/* next env->eip */
|
|
543 | 543 |
stq_phys(env->vm_vmcb + offsetof(struct vmcb, control.exit_info_2), |
544 | 544 |
env->eip + next_eip_addend); |
545 | 545 |
helper_vmexit(env, SVM_EXIT_IOIO, param | (port << 16)); |
... | ... | |
558 | 558 |
exit_code, exit_info_1, |
559 | 559 |
ldq_phys(env->vm_vmcb + offsetof(struct vmcb, |
560 | 560 |
control.exit_info_2)), |
561 |
EIP);
|
|
561 |
env->eip);
|
|
562 | 562 |
|
563 | 563 |
if (env->hflags & HF_INHIBIT_IRQ_MASK) { |
564 | 564 |
stl_phys(env->vm_vmcb + offsetof(struct vmcb, control.int_state), |
... | ... | |
657 | 657 |
svm_load_seg_cache(env, env->vm_hsave + offsetof(struct vmcb, save.ds), |
658 | 658 |
R_DS); |
659 | 659 |
|
660 |
EIP = ldq_phys(env->vm_hsave + offsetof(struct vmcb, save.rip));
|
|
660 |
env->eip = ldq_phys(env->vm_hsave + offsetof(struct vmcb, save.rip));
|
|
661 | 661 |
env->regs[R_ESP] = ldq_phys(env->vm_hsave + offsetof(struct vmcb, save.rsp)); |
662 | 662 |
env->regs[R_EAX] = ldq_phys(env->vm_hsave + offsetof(struct vmcb, save.rax)); |
663 | 663 |
|
Also available in: Unified diff