From d12160c5d070ee0819054a9a515ac0a75b2bc6ac Mon Sep 17 00:00:00 2001 From: zxq5 Date: Sat, 22 Feb 2025 03:16:13 +0000 Subject: [PATCH] setup TSS --- kernel/src/arch/x86_64/gdt.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 kernel/src/arch/x86_64/gdt.rs diff --git a/kernel/src/arch/x86_64/gdt.rs b/kernel/src/arch/x86_64/gdt.rs new file mode 100644 index 0000000..bf4c036 --- /dev/null +++ b/kernel/src/arch/x86_64/gdt.rs @@ -0,0 +1,18 @@ +use x86_64::{structures::tss::TaskStateSegment, VirtAddr}; + +use spin::Lazy; + +pub const DOUBLE_FAULT_1ST_INDEX: u16 = 0; + +static TSS: Lazy = Lazy::new(|| { + let mut tss = TaskStateSegment::new(); + tss.interrupt_stack_table[DOUBLE_FAULT_1ST_INDEX as usize] = { + const STACK_SIZE: usize = 4096 * 8; + static mut STACK: [u8; STACK_SIZE] = [0; STACK_SIZE]; + + let stack_start = VirtAddr::from_ptr(&raw const STACK); + let stack_end = stack_start + STACK_SIZE.try_into().unwrap(); + stack_end + }; + tss +});