Kernel: Add actual register values to x86_64 kernel panic

Very hackish implementation, but we now get actual registers at the
time of the interrupt happening
This commit is contained in:
Bananymous
2023-01-30 18:52:38 +02:00
parent bfe3426f6d
commit 6dc22b7251
8 changed files with 77 additions and 66 deletions

View File

@@ -111,23 +111,16 @@ namespace IDT
extern "C" void handle_irq()
{
uint32_t isr[8];
InterruptController::Get().GetISR(isr);
uint8_t irq = 0;
for (uint8_t i = 0; i < 8; i++)
for (uint32_t i = 0; i <= 0xFF; i++)
{
for (uint8_t j = 0; j < 32; j++)
if (InterruptController::Get().IsInService(i))
{
if (isr[i] & ((uint32_t)1 << j))
{
irq = 32 * i + j;
goto found;
}
irq = i;
break;
}
}
found:
if (irq == 0)
{
dprintln("Spurious irq");
@@ -137,19 +130,7 @@ namespace IDT
if (s_irq_handlers[irq])
s_irq_handlers[irq]();
else
{
uint32_t isr_byte = irq / 32;
uint32_t isr_bit = irq % 32;
uint32_t isr[8];
InterruptController::Get().GetISR(isr);
if (!(isr[isr_byte] & (1 << isr_bit)))
{
dprintln("spurious irq 0x{2H}", irq);
return;
}
dprintln("no handler for irq 0x{2H}\n", irq);
}
InterruptController::Get().EOI(irq);
}