diff --git a/kernel/kernel/GDT.cpp b/kernel/kernel/GDT.cpp index f8b502ba..50d4649b 100644 --- a/kernel/kernel/GDT.cpp +++ b/kernel/kernel/GDT.cpp @@ -65,7 +65,9 @@ namespace Kernel { memset(&m_tss, 0x00, sizeof(TaskStateSegment)); m_tss.iopb = sizeof(TaskStateSegment); +#if ARCH(x86_64) m_tss.ist1 = reinterpret_cast(g_boot_stack_top); +#endif uintptr_t base = reinterpret_cast(&m_tss); diff --git a/kernel/kernel/IDT.cpp b/kernel/kernel/IDT.cpp index 5d298c80..dbaaaab0 100644 --- a/kernel/kernel/IDT.cpp +++ b/kernel/kernel/IDT.cpp @@ -410,9 +410,11 @@ namespace Kernel desc.offset1 = (uint16_t)((uintptr_t)handler >> 16); #if ARCH(x86_64) desc.offset2 = (uint32_t)((uintptr_t)handler >> 32); + desc.IST = ist; +#else + (void)ist; #endif - desc.IST = ist; desc.selector = 0x08; desc.flags = 0x8E; } @@ -454,8 +456,10 @@ namespace Kernel ISR_LIST_X #undef X +#if ARCH(x86_64) idt->register_interrupt_handler(DoubleFault, isr8, 1); static_assert(DoubleFault == 8); +#endif #define X(num) idt->register_interrupt_handler(IRQ_VECTOR_BASE + num, irq ## num); IRQ_LIST_X