Draft: lab 3 irq wtf
This commit is contained in:
42
kernel/lib/exception.c
Normal file
42
kernel/lib/exception.c
Normal file
@@ -0,0 +1,42 @@
|
||||
#include <exception.h>
|
||||
#include <errcode.h>
|
||||
#include <stddef.h>
|
||||
#include <logger.h>
|
||||
#include <utils.h>
|
||||
|
||||
void init_exception()
|
||||
{
|
||||
asm volatile(
|
||||
"adr x0, exception_vector_table" ENDL
|
||||
"msr vbar_el1, x0" ENDL
|
||||
::: "x0"
|
||||
);
|
||||
}
|
||||
|
||||
void not_implemented_handler()
|
||||
{
|
||||
DEBUG_EXCEP("not implemented caught");
|
||||
}
|
||||
|
||||
void synchronous_handler()
|
||||
{
|
||||
static int count = 0;
|
||||
if (count++ > 5)
|
||||
exit(ERR_ADMINKILL);
|
||||
DEBUG_EXCEP("synchronous caught");
|
||||
uint64_t x0 = 0x0;
|
||||
R_REG(x0, x0);
|
||||
LOG(x0);
|
||||
|
||||
uint64_t spsr_el1 = 0x0;
|
||||
R_SYSREG(spsr_el1, spsr_el1);
|
||||
LOG(spsr_el1);
|
||||
|
||||
uint64_t elr_el1 = 0x0;
|
||||
R_SYSREG(elr_el1, elr_el1);
|
||||
LOG(elr_el1);
|
||||
|
||||
uint64_t esr_el1 = 0x0;
|
||||
R_SYSREG(esr_el1, esr_el1);
|
||||
DEBUG_EXCEP(esr_el1);
|
||||
}
|
||||
Reference in New Issue
Block a user