diff options
| author | Jake Mannens <jake72360@gmail.com> | 2018-06-25 03:57:22 +1000 |
|---|---|---|
| committer | Jake Mannens <jake72360@gmail.com> | 2018-06-25 03:57:22 +1000 |
| commit | fbbcb04f9e3197976d6ab4a79c45aa0a84e39aba (patch) | |
| tree | f2512a391cf13d77e48a9ad6e02d2d251cb7088a /kernel/traps.s | |
| parent | 97d3551106495fa18969e2690720b621ba5a9c0b (diff) | |
Added the header asm/interrupt.h which includes a prototype for the
assembly function register_isr making it usable within the C portions of
the source.
Added a new file panic.s with the function panic that will print a panic
message, disable interrupts and halt the system.
Created the skeleton framework for paging in the new file page.s. The
new function paging_init (called in kboot) will setup a simple page
directory with two tables covering all addresses 0-8MB. It will also
mark pages from 0-1MB as 'supervisor-only' to protect the kernel. NOTE:
The function paging_init must be called before initialising the IDT as
it does not disable interrupts!
Modified the page fault handler to print the offending linear address
along with the supplied error code. Following that, the handler will
initiate a kernel panic. This function (along with panic) assumes
console I/O to be operational.
Modified the userspace test code to deliberately intiate a page fault by
accessing an unmapped page.
Diffstat (limited to 'kernel/traps.s')
| -rw-r--r-- | kernel/traps.s | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/kernel/traps.s b/kernel/traps.s index ba9814c..0381ee8 100644 --- a/kernel/traps.s +++ b/kernel/traps.s @@ -7,6 +7,8 @@ global syscall_init global traps_init extern call_table extern idt +extern panic +extern printf extern register_isr %macro SAVE 0 @@ -179,7 +181,18 @@ exc_gprot: exc_pagef: SAVE_ERR + + push ebx + mov ebx, cr2 + push ebx + push .fmt + call printf + add esp, 8 + call panic + RESTORE_ERR +.fmt: + db "Page Fault (illegal memory access: 0x%08x:0x%02x)", 10, 0 exc_mathf: SAVE |
