Add and test an invalid opcode handler function

This commit is contained in:
Philipp Oppermann
2016-08-03 16:26:22 +02:00
parent bf72618647
commit 86a757cb61
2 changed files with 13 additions and 6 deletions

View File

@@ -23,6 +23,7 @@ lazy_static! {
let mut idt = idt::Idt::new();
idt.set_handler(0, handler!(divide_by_zero_handler));
idt.set_handler(6, handler!(invalid_opcode_handler));
idt
};
@@ -53,3 +54,13 @@ extern "C" fn divide_by_zero_handler(stack_frame: *const ExceptionStackFrame)
}
loop {}
}
extern "C" fn invalid_opcode_handler(stack_frame: *const ExceptionStackFrame)
-> !
{
unsafe {
print_error(format_args!("EXCEPTION: INVALID OPCODE at {:#x}\n{:#?}",
(*stack_frame).instruction_pointer, *stack_frame));
}
loop {}
}

View File

@@ -52,12 +52,8 @@ pub extern "C" fn rust_main(multiboot_information_address: usize) {
// initialize our IDT
interrupts::init();
fn divide_by_zero() {
unsafe { asm!("mov dx, 0; div dx" ::: "ax", "dx" : "volatile", "intel") }
}
// provoke a divide by zero fault inside println
println!("{:?}", divide_by_zero());
// provoke a invalid opcode exception
unsafe { asm!("ud2") };
println!("It did not crash!");
loop {}