35 lines
1.0 KiB
C++
Raw Normal View History

#define MODULE "isr"
2022-09-05 16:13:51 +02:00
#include "interrupts/IRQ.h"
#include "interrupts/SavedContext.h"
#include "log/Log.h"
2022-09-05 16:13:51 +02:00
#include "panic/hang.h"
#include "std/stdio.h"
extern "C" void common_handler(SavedContext* context)
{
if (context->number >= 0x20 && context->number < 0x30)
{
IRQ::interrupt_handler(context);
return;
}
2022-09-05 16:13:51 +02:00
if (context->number == 13)
{
kerrorln("General protection fault at RIP %lx, cs %ld, ss %ld, RSP %lx, error code %ld\n", context->rip,
context->cs, context->ss, context->rsp, context->error_code);
2022-09-05 16:13:51 +02:00
while (1) halt();
}
if (context->number == 14)
{
kerrorln("Page fault in %s (RIP %lx), while trying to access %lx, error code %ld\n",
context->cs == 8 ? "ring 0" : "ring 3", context->rip, context->cr2, context->error_code);
2022-09-11 08:23:32 +02:00
hang();
}
if (context->number == 8)
{
kerrorln("Double fault, halting");
hang();
}
if (context->number == 256) { kwarnln("Unused interrupt"); }
2022-09-05 16:13:51 +02:00
return;
}