diff --git a/arch/i386/paging.cc b/arch/i386/paging.cc index 64c09562ccbf4ca64e1c0e008b7a3fa3d76b71dc..2c09b83907a006cec125dfc0d18e97db5d41b261 100644 --- a/arch/i386/paging.cc +++ b/arch/i386/paging.cc @@ -5,6 +5,7 @@ */ #include "paging.h" +#include "hooks.h" namespace arch { @@ -22,7 +23,7 @@ void MMU::init() { } // Pagefault interrupt handler printing details for debugging -#if DEBUG +#ifdef CONFIG_ARCH_MPU #include "idt.h" #include "output.h" #include "os/util/inline.h" @@ -38,6 +39,8 @@ ISR(14) { asm("mov %%cr2, %0" : "=r"(fault_addr)); asm("mov %%cr3, %0" : "=r"(cr3)); + CALL_HOOK(FaultDetectedHook, MPUdetected, fault_addr, cr3); + debug << "PAGE FAULT for 0x" << hex << fault_addr; debug << ", IP @ 0x" << cpu->eip; debug << ", PD @ 0x" << cr3; @@ -47,4 +50,4 @@ ISR(14) { } } -#endif // DEBUG +#endif // CONFIG_ARCH_CPU diff --git a/os/hooks.h b/os/hooks.h index 76c3e613462f5e1132fa7cb3d6a04542810f47c9..09b5c4b6671ad990509c503b9075029b02860d15 100644 --- a/os/hooks.h +++ b/os/hooks.h @@ -76,6 +76,7 @@ typedef enum DetectedFault_t { STATE_ASSERTdetected = 9, RETRY_ERRORdetected = 10, TMRdetected = 11, + MPUdetected = 12, } DetectedFault_t;