diff --git a/src/interrupts/mod.rs b/src/interrupts/mod.rs index 4a148d8e..b74cd24d 100644 --- a/src/interrupts/mod.rs +++ b/src/interrupts/mod.rs @@ -113,29 +113,24 @@ struct ExceptionStackFrame { stack_segment: u64, } -use vga_buffer::print_error; - extern "C" fn divide_by_zero_handler(stack_frame: *const ExceptionStackFrame) { - unsafe { - print_error(format_args!("EXCEPTION: DIVIDE BY ZERO\n{:#?}", *stack_frame)); - } + let stack_frame = unsafe { &*stack_frame }; + println!("EXCEPTION: DIVIDE BY ZERO\n{:#?}", stack_frame); loop {} } extern "C" fn breakpoint_handler(stack_frame: *const ExceptionStackFrame) { - unsafe { - print_error(format_args!("EXCEPTION: BREAKPOINT at {:#x}\n{:#?}", - (*stack_frame).instruction_pointer, - *stack_frame)); - } + let stack_frame = unsafe { &*stack_frame }; + println!("EXCEPTION: BREAKPOINT at {:#x}\n{:#?}", + stack_frame.instruction_pointer, + stack_frame); } 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)); - } + let stack_frame = unsafe { &*stack_frame }; + println!("EXCEPTION: INVALID OPCODE at {:#x}\n{:#?}", + stack_frame.instruction_pointer, + *stack_frame); loop {} } @@ -150,13 +145,12 @@ bitflags! { } extern "C" fn page_fault_handler(stack_frame: *const ExceptionStackFrame, error_code: u64) { + let stack_frame = unsafe { &*stack_frame }; use x86::controlregs; - unsafe { - print_error(format_args!("EXCEPTION: PAGE FAULT while accessing {:#x}\nerror code: \ + println!("EXCEPTION: PAGE FAULT while accessing {:#x}\nerror code: \ {:?}\n{:#?}", - controlregs::cr2(), - PageFaultErrorCode::from_bits(error_code).unwrap(), - *stack_frame)); - } + unsafe { controlregs::cr2() }, + PageFaultErrorCode::from_bits(error_code).unwrap(), + stack_frame); loop {} } diff --git a/src/vga_buffer.rs b/src/vga_buffer.rs index fc16097a..e3cc06cc 100644 --- a/src/vga_buffer.rs +++ b/src/vga_buffer.rs @@ -43,17 +43,6 @@ pub fn clear_screen() { } } -pub fn print_error(fmt: fmt::Arguments) { - use core::fmt::Write; - use core::mem; - - let mut writer = WRITER.lock(); - let red = ColorCode::new(Color::Red, Color::Black); - let default_color = mem::replace(&mut writer.color_code, red); - writer.write_fmt(fmt).unwrap(); - writer.color_code = default_color; -} - #[allow(dead_code)] #[derive(Debug, Clone, Copy)] #[repr(u8)]