diff --git a/kernel/src/interrupts/Entry.cpp b/kernel/src/interrupts/Entry.cpp index e439287c..6f24af31 100644 --- a/kernel/src/interrupts/Entry.cpp +++ b/kernel/src/interrupts/Entry.cpp @@ -1,6 +1,8 @@ #define MODULE "isr" +#include "assert.h" #include "interrupts/IRQ.h" +#include "interrupts/Interrupts.h" #include "interrupts/SavedContext.h" #include "log/Log.h" #include "panic/hang.h" @@ -9,6 +11,7 @@ extern "C" void common_handler(SavedContext* context) { + ASSERT(Interrupts::is_in_handler()); if (context->number >= 0x20 && context->number < 0x30) { IRQ::interrupt_handler(context); @@ -38,6 +41,10 @@ extern "C" void common_handler(SavedContext* context) if (context->number == 8) { kerrorln("Double fault, halting"); + kinfoln("Stack trace:"); + + StackTracer tracer(context->rbp); + tracer.trace(); hang(); } if (context->number == 256) { kwarnln("Unused interrupt"); }