From 33a96b26d39536e9d8309f4ac1aff1acdb017b8e Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Wed, 26 Oct 2016 09:08:27 +0200 Subject: [PATCH] Remove print_error and use normal println in exception handlers (cherry picked from commit 9b83b2853e7182294107612514953a840aa2b149) --- src/interrupts/mod.rs | 36 +++++++++++++++--------------------- src/vga_buffer.rs | 12 ------------ 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/interrupts/mod.rs b/src/interrupts/mod.rs index 4a148d8e..7d27f40b 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!("\nEXCEPTION: 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!("\nEXCEPTION: 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!("\nEXCEPTION: 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!("\nEXCEPTION: 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 1d9d117e..e3cc06cc 100644 --- a/src/vga_buffer.rs +++ b/src/vga_buffer.rs @@ -43,18 +43,6 @@ pub fn clear_screen() { } } -pub unsafe fn print_error(fmt: fmt::Arguments) { - use core::fmt::Write; - - let mut writer = Writer { - column_position: 0, - color_code: ColorCode::new(Color::Red, Color::Black), - buffer: Unique::new(0xb8000 as *mut _), - }; - writer.new_line(); - writer.write_fmt(fmt); -} - #[allow(dead_code)] #[derive(Debug, Clone, Copy)] #[repr(u8)]