From a93aa3a4263c904d905ab727f27961059de6a57e Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Wed, 22 Nov 2023 12:06:37 -0800 Subject: [PATCH] [Zion] Add an invalid opcode handler. --- zion/interrupt/interrupt.cpp | 7 +++++++ zion/interrupt/interrupt_enter.s | 1 + 2 files changed, 8 insertions(+) diff --git a/zion/interrupt/interrupt.cpp b/zion/interrupt/interrupt.cpp index 9022b89..2f0ade4 100644 --- a/zion/interrupt/interrupt.cpp +++ b/zion/interrupt/interrupt.cpp @@ -75,6 +75,12 @@ extern "C" void interrupt_divide_by_zero(InterruptFrame* frame) { panic("DIV0"); } +extern "C" void isr_invalid_opcode(); +extern "C" void interrupt_invalid_opcode(InterruptFrame* frame) { + dbgln("RIP: {x}", frame->rip); + panic("INVALID OPCODE"); +} + extern "C" void isr_protection_fault(); extern "C" void interrupt_protection_fault(InterruptFrame* frame) { dbgln("General Protection Fault"); @@ -183,6 +189,7 @@ extern "C" void interrupt_pci4(InterruptFrame*) { void InitIdt() { gIdt[0] = CreateDescriptor(isr_divide_by_zero); + gIdt[0x6] = CreateDescriptor(isr_invalid_opcode); gIdt[0xD] = CreateDescriptor(isr_protection_fault); gIdt[0xE] = CreateDescriptor(isr_page_fault); gIdt[0x13] = CreateDescriptor(isr_fpe_fault); diff --git a/zion/interrupt/interrupt_enter.s b/zion/interrupt/interrupt_enter.s index 9acbe64..0da6b16 100644 --- a/zion/interrupt/interrupt_enter.s +++ b/zion/interrupt/interrupt_enter.s @@ -56,6 +56,7 @@ isr_\name: .endm isr_handler divide_by_zero +isr_handler invalid_opcode isr_handler protection_fault,1 isr_handler page_fault,1 isr_handler fpe_fault