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);
}
__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) {
// Do nothing
outb(0x20, 0x20);
}
void init_idt() {
@ -30,6 +36,7 @@ void init_idt() {
set_entry(i, 0x08, &ignore_interrupt, 0x8E);
set_entry(0x20, 0x08, &interrupt_20, 0x8E);
set_entry(0xE, 0x08, &page_fault, 0x8E);
outb(0x20, 0x11);
outb(0xA0, 0x11);

View File

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