From 562baddab8eefa80cdeffe7120186e693440ffa2 Mon Sep 17 00:00:00 2001 From: AtsukiTak Date: Mon, 14 Oct 2019 17:54:54 +0900 Subject: [PATCH] =?UTF-8?q?double=20fault=20handler=E3=81=AEstack=20index?= =?UTF-8?q?=E3=82=92=E8=A8=AD=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interrupts.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 }; }