From aec0d309ee8803a37dfa0deb5224b68fa53fff5d Mon Sep 17 00:00:00 2001 From: Wei Liu Date: Wed, 13 Jan 2021 12:54:50 +0000 Subject: [PATCH] hypervisor: emulator: also set ES segment in MockVMM Some instructions, such as MOVS, need a valid ES segment. Signed-off-by: Wei Liu --- hypervisor/src/arch/x86/emulator/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hypervisor/src/arch/x86/emulator/mod.rs b/hypervisor/src/arch/x86/emulator/mod.rs index 03e2d428a..7112cc4e8 100644 --- a/hypervisor/src/arch/x86/emulator/mod.rs +++ b/hypervisor/src/arch/x86/emulator/mod.rs @@ -662,10 +662,12 @@ mod mock_vmm { let _ = env_logger::try_init(); let cs_reg = segment_from_gdt(gdt_entry(0xc09b, 0, 0xffffffff), 1); let ds_reg = segment_from_gdt(gdt_entry(0xc093, 0, 0xffffffff), 2); + let es_reg = segment_from_gdt(gdt_entry(0xc093, 0, 0xffffffff), 3); let mut initial_state = CpuState::default(); initial_state.set_ip(ip); initial_state.write_segment(Register::CS, cs_reg).unwrap(); initial_state.write_segment(Register::DS, ds_reg).unwrap(); + initial_state.write_segment(Register::ES, es_reg).unwrap(); for (reg, value) in regs { initial_state.write_reg(reg, value).unwrap(); }