From db4e879c34bac09a1be841f4986037258022e353 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Fri, 25 Jan 2019 13:56:40 +0100 Subject: [PATCH] Create a new GDT module and a static TSS --- src/gdt.rs | 20 ++++++++++++++++++++ src/lib.rs | 1 + 2 files changed, 21 insertions(+) create mode 100644 src/gdt.rs diff --git a/src/gdt.rs b/src/gdt.rs new file mode 100644 index 00000000..2b82eb86 --- /dev/null +++ b/src/gdt.rs @@ -0,0 +1,20 @@ +use lazy_static::lazy_static; +use x86_64::structures::tss::TaskStateSegment; +use x86_64::VirtAddr; + +pub const DOUBLE_FAULT_IST_INDEX: u16 = 0; + +lazy_static! { + static ref TSS: TaskStateSegment = { + let mut tss = TaskStateSegment::new(); + tss.interrupt_stack_table[DOUBLE_FAULT_IST_INDEX as usize] = { + const STACK_SIZE: usize = 4096; + static mut STACK: [u8; STACK_SIZE] = [0; STACK_SIZE]; + + let stack_start = VirtAddr::from_ptr(unsafe { &STACK }); + let stack_end = stack_start + STACK_SIZE; + stack_end + }; + tss + }; +} diff --git a/src/lib.rs b/src/lib.rs index 562de39e..0bd6fe54 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,7 @@ #![cfg_attr(not(test), no_std)] #![feature(abi_x86_interrupt)] +pub mod gdt; pub mod interrupts; pub mod serial; pub mod vga_buffer;