mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 09:43:56 -06:00
exec: Make lduw_*_phys input an AddressSpace
Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
This commit is contained in:
parent
2c17449b30
commit
41701aa4ee
10 changed files with 48 additions and 44 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue