diff --git a/src/interrupts.rs b/src/interrupts.rs index c95c111..a12c0c2 100644 --- a/src/interrupts.rs +++ b/src/interrupts.rs @@ -51,7 +51,7 @@ //! `x86-interrupt` 呼び出し規約はまだ安定化されていないので、 `#![feature(abi_x86_interrupt)]` を //! `lib.rs` フィアルの先頭に追加する必要がある。 -use crate::println; +use crate::{gdt::tss, println}; use lazy_static::lazy_static; use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame}; @@ -63,7 +63,12 @@ lazy_static! { static ref IDT: InterruptDescriptorTable = { let mut idt = InterruptDescriptorTable::new(); idt.breakpoint.set_handler_fn(breakpoint_handler); - idt.double_fault.set_handler_fn(double_fault_handler); + unsafe { + idt.double_fault.set_handler_fn(double_fault_handler) + // double fault handler が呼び出されたときに使用する + // スタック領域を設定。 + .set_stack_index(tss::DOUBLE_FAULT_IST_INDEX); + } idt }; }