fix: mov sreg, reg triggers pf before ud

This commit is contained in:
Fabian 2022-11-22 18:03:16 -06:00
commit 14b72530d4

View file

@ -919,23 +919,28 @@ pub unsafe fn instr32_8D_mem(modrm_byte: i32, r: i32) {
*prefixes = 0;
}
unsafe fn instr_8E_helper(data: i32, r: i32) {
#[no_mangle]
pub unsafe fn instr_8E_mem(addr: i32, r: i32) {
if r == ES || r == SS || r == DS || r == FS || r == GS {
if !switch_seg(r, data) {
if !switch_seg(r, return_on_pagefault!(safe_read16(addr))) {
return;
}
}
else {
dbg_log!("mov sreg #ud");
trigger_ud();
};
}
}
#[no_mangle]
pub unsafe fn instr_8E_mem(addr: i32, r: i32) {
instr_8E_helper(return_on_pagefault!(safe_read16(addr)), r);
pub unsafe fn instr_8E_reg(r1: i32, r: i32) {
if r == ES || r == SS || r == DS || r == FS || r == GS {
switch_seg(r, read_reg16(r1));
}
else {
dbg_log!("mov sreg #ud");
trigger_ud();
}
}
#[no_mangle]
pub unsafe fn instr_8E_reg(r1: i32, r: i32) { instr_8E_helper(read_reg16(r1), r); }
pub unsafe fn instr16_8F_0_mem(modrm_byte: i32) {
// pop