#include "exception.h" #include "vga.h" // Need GCC > 6 __attribute__((interrupt)) void print_handler(struct interrupt_frame *frame, ulong error_code) { printStringDetails("EXCEPTION", RED, BLACK, 0, VGA_HEIGHT - 1); printIntDetails(error_code, RED, BLACK, 11, VGA_HEIGHT - 1); (void)frame; (void)error_code; } // c.f. https://wiki.osdev.org/Paging#Handling // error_code bit0: Present ? // bit1: Trying to write ? // bit2: User page try to access? __attribute__((interrupt)) void pagefault_handler(struct interrupt_frame *frame, ulong error_code) { // A page fault has occurred. // The faulting address is stored in the CR2 register. uint32_t faulting_address; asm volatile("mov %%cr2, %0" : "=r"(faulting_address)); printStringDetails("PAGE FAULT", RED, BLACK, 0, VGA_HEIGHT - 1); printIntDetails(error_code, RED, BLACK, 11, VGA_HEIGHT - 1); (void)faulting_address; (void)frame; (void)error_code; }