Skip to content

Commit

Permalink
fix: mov sreg, reg triggers pf before ud
Browse files Browse the repository at this point in the history
  • Loading branch information
copy committed Nov 26, 2022
1 parent 651d0d8 commit 14b7253
Showing 1 changed file with 12 additions and 7 deletions.
19 changes: 12 additions & 7 deletions src/rust/cpu/instructions.rs
Expand Up @@ -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
Expand Down

0 comments on commit 14b7253

Please sign in to comment.