Complete pagefault handler
This commit is contained in:
parent
8108c8f3ab
commit
432d8801e1
@ -11,14 +11,21 @@ __attribute__((interrupt)) void print_handler(struct interrupt_frame *frame, ulo
|
|||||||
(void)error_code;
|
(void)error_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// c.f. https://wiki.osdev.org/Paging#Handling
|
// c.f. https://wiki.osdev.org/Paging#Handling
|
||||||
// error_code bit0: Present ?
|
// error_code bit0: Present ?
|
||||||
// bit1: Trying to write ?
|
// bit1: Trying to write ?
|
||||||
// bit2: User page try to access?
|
// bit2: User page try to access?
|
||||||
__attribute__((interrupt)) void pagefault_handler(struct interrupt_frame *frame, ulong error_code){
|
__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);
|
printStringDetails("PAGE FAULT", RED, BLACK, 0, VGA_HEIGHT - 1);
|
||||||
printIntDetails(error_code, RED, BLACK, 11, VGA_HEIGHT - 1);
|
printIntDetails(error_code, RED, BLACK, 11, VGA_HEIGHT - 1);
|
||||||
|
(void)faulting_address;
|
||||||
(void)frame;
|
(void)frame;
|
||||||
(void)error_code;
|
(void)error_code;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user