Kernel now handles page faults.

This commit is contained in:
Xnoe 2021-10-21 22:06:27 +01:00
parent 2dcf083763
commit cd8bd42ebb
Signed by: xnoe
GPG Key ID: 45AC398F44F0DAFE
2 changed files with 11 additions and 1 deletions

View File

@ -19,8 +19,14 @@ __attribute__((interrupt)) void interrupt_20(struct interrupt_frame* frame) {
outb(0x20, 0x20); outb(0x20, 0x20);
} }
__attribute__((interrupt)) void page_fault(struct interrupt_frame* frame, uint32_t err_code) {
uint32_t problem_address;
asm("mov %%cr2, %0" : "=a" (problem_address) :);
printf("Page Fault at %x\n", problem_address);
}
__attribute__((interrupt)) void ignore_interrupt(struct interrupt_frame* frame) { __attribute__((interrupt)) void ignore_interrupt(struct interrupt_frame* frame) {
// Do nothing outb(0x20, 0x20);
} }
void init_idt() { void init_idt() {
@ -30,6 +36,7 @@ void init_idt() {
set_entry(i, 0x08, &ignore_interrupt, 0x8E); set_entry(i, 0x08, &ignore_interrupt, 0x8E);
set_entry(0x20, 0x08, &interrupt_20, 0x8E); set_entry(0x20, 0x08, &interrupt_20, 0x8E);
set_entry(0xE, 0x08, &page_fault, 0x8E);
outb(0x20, 0x11); outb(0x20, 0x11);
outb(0xA0, 0x11); outb(0xA0, 0x11);

View File

@ -72,6 +72,9 @@ int main() {
load_file(filenamebuffer, filebuffer); load_file(filenamebuffer, filebuffer);
printf(filebuffer); printf(filebuffer);
} else if (strcmp(buffer, "pagefault", 9)) {
uint32_t* bad_addr = 0xdeadbeef;
uint32_t a = *bad_addr;
} else { } else {
char filenamebuffer[12]; char filenamebuffer[12];
decode_filename(buffer, filenamebuffer); decode_filename(buffer, filenamebuffer);