diff options
Diffstat (limited to 'target-i386')
-rw-r--r-- | target-i386/smm_helper.c | 12 | ||||
-rw-r--r-- | target-i386/svm_helper.c | 15 |
2 files changed, 14 insertions, 13 deletions
diff --git a/target-i386/smm_helper.c b/target-i386/smm_helper.c index 17a568cfc5..c5663e13c6 100644 --- a/target-i386/smm_helper.c +++ b/target-i386/smm_helper.c @@ -193,28 +193,28 @@ void helper_rsm(CPUX86State *env) for (i = 0; i < 6; i++) { offset = 0x7e00 + i * 16; cpu_x86_load_seg_cache(env, i, - lduw_phys(sm_state + offset), + lduw_phys(cs->as, sm_state + offset), ldq_phys(cs->as, sm_state + offset + 8), ldl_phys(cs->as, sm_state + offset + 4), - (lduw_phys(sm_state + offset + 2) & + (lduw_phys(cs->as, sm_state + offset + 2) & 0xf0ff) << 8); } env->gdt.base = ldq_phys(cs->as, sm_state + 0x7e68); env->gdt.limit = ldl_phys(cs->as, sm_state + 0x7e64); - env->ldt.selector = lduw_phys(sm_state + 0x7e70); + env->ldt.selector = lduw_phys(cs->as, sm_state + 0x7e70); env->ldt.base = ldq_phys(cs->as, sm_state + 0x7e78); env->ldt.limit = ldl_phys(cs->as, sm_state + 0x7e74); - env->ldt.flags = (lduw_phys(sm_state + 0x7e72) & 0xf0ff) << 8; + env->ldt.flags = (lduw_phys(cs->as, sm_state + 0x7e72) & 0xf0ff) << 8; env->idt.base = ldq_phys(cs->as, sm_state + 0x7e88); env->idt.limit = ldl_phys(cs->as, sm_state + 0x7e84); - env->tr.selector = lduw_phys(sm_state + 0x7e90); + env->tr.selector = lduw_phys(cs->as, sm_state + 0x7e90); env->tr.base = ldq_phys(cs->as, sm_state + 0x7e98); env->tr.limit = ldl_phys(cs->as, sm_state + 0x7e94); - env->tr.flags = (lduw_phys(sm_state + 0x7e92) & 0xf0ff) << 8; + env->tr.flags = (lduw_phys(cs->as, sm_state + 0x7e92) & 0xf0ff) << 8; env->regs[R_EAX] = ldq_phys(cs->as, sm_state + 0x7ff8); env->regs[R_ECX] = ldq_phys(cs->as, sm_state + 0x7ff0); diff --git a/target-i386/svm_helper.c b/target-i386/svm_helper.c index cc6de20964..73bc4968dd 100644 --- a/target-i386/svm_helper.c +++ b/target-i386/svm_helper.c @@ -104,10 +104,11 @@ static inline void svm_load_seg(CPUX86State *env, hwaddr addr, CPUState *cs = ENV_GET_CPU(env); unsigned int flags; - sc->selector = lduw_phys(addr + offsetof(struct vmcb_seg, selector)); + sc->selector = lduw_phys(cs->as, + addr + offsetof(struct vmcb_seg, selector)); sc->base = ldq_phys(cs->as, addr + offsetof(struct vmcb_seg, base)); sc->limit = ldl_phys(cs->as, addr + offsetof(struct vmcb_seg, limit)); - flags = lduw_phys(addr + offsetof(struct vmcb_seg, attrib)); + flags = lduw_phys(cs->as, addr + offsetof(struct vmcb_seg, attrib)); sc->flags = ((flags & 0xff) << 8) | ((flags & 0x0f00) << 12); } @@ -180,16 +181,16 @@ void helper_vmrun(CPUX86State *env, int aflag, int next_eip_addend) vmcb in svm mode */ env->intercept = ldq_phys(cs->as, env->vm_vmcb + offsetof(struct vmcb, control.intercept)); - env->intercept_cr_read = lduw_phys(env->vm_vmcb + + env->intercept_cr_read = lduw_phys(cs->as, env->vm_vmcb + offsetof(struct vmcb, control.intercept_cr_read)); - env->intercept_cr_write = lduw_phys(env->vm_vmcb + + env->intercept_cr_write = lduw_phys(cs->as, env->vm_vmcb + offsetof(struct vmcb, control.intercept_cr_write)); - env->intercept_dr_read = lduw_phys(env->vm_vmcb + + env->intercept_dr_read = lduw_phys(cs->as, env->vm_vmcb + offsetof(struct vmcb, control.intercept_dr_read)); - env->intercept_dr_write = lduw_phys(env->vm_vmcb + + env->intercept_dr_write = lduw_phys(cs->as, env->vm_vmcb + offsetof(struct vmcb, control.intercept_dr_write)); env->intercept_exceptions = ldl_phys(cs->as, env->vm_vmcb + @@ -561,7 +562,7 @@ void helper_svm_check_io(CPUX86State *env, uint32_t port, uint32_t param, offsetof(struct vmcb, control.iopm_base_pa)); uint16_t mask = (1 << ((param >> 4) & 7)) - 1; - if (lduw_phys(addr + port / 8) & (mask << (port & 7))) { + if (lduw_phys(cs->as, addr + port / 8) & (mask << (port & 7))) { /* next env->eip */ stq_phys(env->vm_vmcb + offsetof(struct vmcb, control.exit_info_2), env->eip + next_eip_addend); |