Move the trap to panic.c
This commit is contained in:
parent
2564aa6aba
commit
2296179bf8
3 changed files with 24 additions and 28 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
#include <kernel/memory.h>
|
#include <kernel/memory.h>
|
||||||
|
|
||||||
void kmain() {
|
void kmain() {
|
||||||
kprintf("Hello, from %s v%f!" , "SquidgeOS", 0.5);
|
kprintf("Hello, from %s!" , "SquidgeOS");
|
||||||
kputs("-------------------");
|
kputs("-------------------");
|
||||||
knewline();
|
knewline();
|
||||||
page_init();
|
page_init();
|
||||||
|
|
|
||||||
|
|
@ -24,3 +24,26 @@ void kpanic_force() {
|
||||||
__asm__ volatile("wfi");
|
__asm__ volatile("wfi");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handle_trap() {
|
||||||
|
kprint("\n!!! HARDWARE EXCEPTION DETECTED !!!\n");
|
||||||
|
|
||||||
|
// Read the 'mcause' register to see WHY we trapped
|
||||||
|
unsigned long cause;
|
||||||
|
__asm__ volatile("csrr %0, mcause" : "=r"(cause));
|
||||||
|
|
||||||
|
switch(cause) {
|
||||||
|
case 0: kprint("Reason: Instruction Address Misaligned\n"); break;
|
||||||
|
case 1: kprint("Reason: Instruction Access Fault\n"); break;
|
||||||
|
case 2: kprint("Reason: Illegal Instruction\n"); break;
|
||||||
|
case 3: kprint("Reason: Breakpoint (ebreak)\n"); break;
|
||||||
|
case 4: kprint("Reason: Load Address Misaligned\n"); break;
|
||||||
|
case 5: kprint("Reason: Load Access Fault\n"); break;
|
||||||
|
case 6: kprint("Reason: Store/AMO Address Misaligned\n"); break;
|
||||||
|
case 7: kprint("Reason: Store/AMO Access Fault\n"); break;
|
||||||
|
default:
|
||||||
|
kprintf("Reason: Unknown Exception Code %d\n", cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
poweroff();
|
||||||
|
}
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
#include <stdint.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <drivers/uart.h>
|
|
||||||
#include <syscon/syscon.h>
|
|
||||||
|
|
||||||
void handle_trap() {
|
|
||||||
kprint("\n!!! HARDWARE EXCEPTION DETECTED !!!\n");
|
|
||||||
|
|
||||||
// Read the 'mcause' register to see WHY we trapped
|
|
||||||
unsigned long cause;
|
|
||||||
__asm__ volatile("csrr %0, mcause" : "=r"(cause));
|
|
||||||
|
|
||||||
switch(cause) {
|
|
||||||
case 0: kprint("Reason: Instruction Address Misaligned\n"); break;
|
|
||||||
case 1: kprint("Reason: Instruction Access Fault\n"); break;
|
|
||||||
case 2: kprint("Reason: Illegal Instruction\n"); break;
|
|
||||||
case 3: kprint("Reason: Breakpoint (ebreak)\n"); break;
|
|
||||||
case 4: kprint("Reason: Load Address Misaligned\n"); break;
|
|
||||||
case 5: kprint("Reason: Load Access Fault\n"); break;
|
|
||||||
case 6: kprint("Reason: Store/AMO Address Misaligned\n"); break;
|
|
||||||
case 7: kprint("Reason: Store/AMO Access Fault\n"); break;
|
|
||||||
default:
|
|
||||||
kprintf("Reason: Unknown Exception Code %d\n", cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
poweroff();
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue