From e0daabde051cb2bd0c727300fd31c01f7de79531 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Mon, 15 Aug 2016 14:34:20 -0600 Subject: [PATCH] GDT and IDT in kernel space Paging constructs completed, remap kernel before jumping to kmain Panic will do a stack trace Remove SSE from none target --- interrupt.rs | 88 ---------------------------------------------------- lib.rs | 4 --- panic.rs | 25 --------------- 3 files changed, 117 deletions(-) delete mode 100644 interrupt.rs delete mode 100644 panic.rs diff --git a/interrupt.rs b/interrupt.rs deleted file mode 100644 index 935c7182..00000000 --- a/interrupt.rs +++ /dev/null @@ -1,88 +0,0 @@ -//! Interrupts. - -use core::fmt; - -/// x86 External Interrupts (1-16). -pub static EXCEPTIONS: [InterruptDescription; 21] = [ - Descriptor::new("Division error", Kind::Fault), - Descriptor::new("Debug trap", Kind::Trap), - Descriptor::new("Unmaskable interrupt", Kind::Unmaskable), - Descriptor::new("Breakpoint", Kind::Trap), - Descriptor::new("Overflow", Kind::Trap), - Descriptor::new("Out of bound", Kind::Fault), - Descriptor::new("Invalid opcode", Kind::Fault), - Descriptor::new("Device unavailable", Kind::Fault), - Descriptor::new("Double fault", Kind::Fault), - Descriptor::new("Coprocessor segment overrun", Kind::Fault), - Descriptor::new("Invalid TSS", Kind::Fault), - Descriptor::new("Segment not present", Kind::Fault), - Descriptor::new("Stack-segment fault", Kind::Fault), - Descriptor::new("General protection", Kind::Fault), - Descriptor::new("Page fault", Kind::Fault), - Descriptor::new("Reserved", Kind::Reserved), - Descriptor::new("x87 FPU", Kind::Fault), - Descriptor::new("Unaligned memory access", Kind::Fault), - Descriptor::new("Machine check", Kind::Abort), - Descriptor::new("SIMD floating-point", Kind::Fault), - Descriptor::new("SIMD floating-point", Kind::Fault), - Descriptor::new("Virtualization violation", Kind::Fault), -]; - -/// An interrupt description. -#[derive(Debug, Copy, Clone)] -pub struct Descriptor { - /// The description of this interrupt. - pub desc: &'static str, - /// The interrupt type. - pub kind: Kind, -} - -impl Descriptor { - /// Create a new interrupt description. - pub fn new(desc: &'static str, kind: Kind) -> Descriptor { - Descriptor { - desc: desc, - kind: kind, - } - } -} - -/// The interrupt kind. -pub enum Kind { - /// A fault. - /// - /// This can have multiple sources, but is often a result of a program error of some sort. - Fault, - /// A trap. - /// - /// These are often for debugging purposes. - Trap, - /// A deliberate abort. - Abort, - /// An unmaskable interrupt. - /// - /// This is a forced interrupt which need to be handled immediately. - Unmaskable, - /// Reserved or deprecated. - Reserved, -} - -/// Enable interrupts. -pub unsafe fn enable() { - asm!("sti"); -} - -/// Disable interrupts. -pub unsafe fn disable() { - asm!("cli"); -} - -/// Fire a software interrupt. -/// -/// Due to inlining being strictly required, we use a macro. -#[macro_export] -macro_rules! interrupt { - ($int:expr) => {{ - asm!("int $0" :: "N" ($int)); - }}; -} diff --git a/lib.rs b/lib.rs index 7dd9a805..e1db70cc 100644 --- a/lib.rs +++ b/lib.rs @@ -67,7 +67,6 @@ #![feature(alloc)] #![feature(collections)] #![feature(const_fn)] -#![feature(lang_items)] #![feature(question_mark)] #![no_std] @@ -97,9 +96,6 @@ extern crate collections; /// Context management pub mod context; -/// Intrinsics for panic handling -pub mod panic; - /// Schemes, filesystem handlers pub mod scheme; diff --git a/panic.rs b/panic.rs deleted file mode 100644 index a1371208..00000000 --- a/panic.rs +++ /dev/null @@ -1,25 +0,0 @@ -//! Intrinsics for panic handling - -use arch::interrupt::halt; - -#[cfg(not(test))] -#[lang = "eh_personality"] -extern "C" fn eh_personality() {} - -#[cfg(not(test))] -/// Required to handle panics -#[lang = "panic_fmt"] -extern "C" fn panic_fmt(fmt: ::core::fmt::Arguments, file_line: &(&'static str, u32)) -> ! { - loop { - unsafe { halt() }; - } -} - -#[allow(non_snake_case)] -#[no_mangle] -/// Required to handle panics -pub extern "C" fn _Unwind_Resume() -> ! { - loop { - unsafe { halt() } - } -} -- GitLab