summaryrefslogtreecommitdiff
path: root/kernel/src/cpu
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-11-29 11:55:47 +0100
committerAleksa Vuckovic <aleksav013@gmail.com>2022-11-29 11:57:20 +0100
commitd36487d9fd2c19b54a3b97bdf3562a17184711fe (patch)
tree63c6d641925e7a78a9cb9ff89562c26b77b2bf3b /kernel/src/cpu
parent450b9160fdcdb0b770b316caf1d72ab893bc7aa5 (diff)
kernel panic
Diffstat (limited to 'kernel/src/cpu')
-rw-r--r--kernel/src/cpu/irq.c104
-rw-r--r--kernel/src/cpu/irq_stub.S5
-rw-r--r--kernel/src/cpu/registers.c29
-rw-r--r--kernel/src/cpu/tss.c1
4 files changed, 40 insertions, 99 deletions
diff --git a/kernel/src/cpu/irq.c b/kernel/src/cpu/irq.c
index a345251..4670da5 100644
--- a/kernel/src/cpu/irq.c
+++ b/kernel/src/cpu/irq.c
@@ -47,203 +47,163 @@ const char* const exception_name[] = {
void isr0_handler(void)
{
- printf("%s\n", exception_name[0]);
- panic();
+ panic("%s\n", exception_name[0]);
}
void isr1_handler(void)
{
- printf("%s\n", exception_name[1]);
- panic();
+ panic("%s\n", exception_name[1]);
}
void isr2_handler(void)
{
- printf("%s\n", exception_name[2]);
- panic();
+ panic("%s\n", exception_name[2]);
}
void isr3_handler(void)
{
- printf("%s\n", exception_name[3]);
- panic();
+ panic("%s\n", exception_name[3]);
}
void isr4_handler(void)
{
- printf("%s\n", exception_name[4]);
- panic();
+ panic("%s\n", exception_name[4]);
}
void isr5_handler(void)
{
- printf("%s\n", exception_name[5]);
- panic();
+ panic("%s\n", exception_name[5]);
}
void isr6_handler(void)
{
- printf("%s\n", exception_name[6]);
- panic();
+ panic("%s\n", exception_name[6]);
}
void isr7_handler(void)
{
- printf("%s\n", exception_name[7]);
- panic();
+ panic("%s\n", exception_name[7]);
}
void isr8_handler(uint64_t error)
{
- printf("%s\n", exception_name[8]);
- printf("error: %d\n", error);
+ panic("%s, error: %d\n", exception_name[8], error);
}
void isr9_handler(void)
{
- printf("%s\n", exception_name[9]);
- panic();
+ panic("%s\n", exception_name[9]);
}
void isr10_handler(uint64_t error)
{
- printf("%s\n", exception_name[10]);
- printf("error: %d\n", error);
- panic();
+ panic("%s, error: %d\n", exception_name[10], error);
}
void isr11_handler(uint64_t error)
{
- printf("%s\n", exception_name[11]);
- printf("error: %d\n", error);
- panic();
+ panic("%s, error: %d\n", exception_name[11], error);
}
void isr12_handler(uint64_t error)
{
- printf("%s\n", exception_name[12]);
- printf("error: %d\n", error);
- panic();
+ panic("%s, error: %d\n", exception_name[12], error);
}
void isr13_handler(uint64_t error)
{
- printf("%s\n", exception_name[13]);
- printf("error: %d\n", error);
- panic();
+ panic("%s, error: %d\n", exception_name[13], error);
}
void isr14_handler(uint64_t error)
{
- printf("%s\n", exception_name[14]);
- printf("error: %d\n", error);
+ printf("%s, error: %d\n", exception_name[14], error);
page_fault(error);
}
void isr15_handler(void)
{
- printf("%s\n", exception_name[15]);
- panic();
+ panic("%s\n", exception_name[15]);
}
void isr16_handler(void)
{
- printf("%s\n", exception_name[16]);
- panic();
+ panic("%s\n", exception_name[16]);
}
void isr17_handler(uint64_t error)
{
- printf("%s\n", exception_name[17]);
- printf("error: %d\n", error);
- panic();
+ panic("%s, error: %d\n", exception_name[17], error);
}
void isr18_handler(void)
{
- printf("%s\n", exception_name[18]);
- panic();
+ panic("%s\n", exception_name[18]);
}
void isr19_handler(void)
{
- printf("%s\n", exception_name[19]);
- panic();
+ panic("%s\n", exception_name[19]);
}
void isr20_handler(void)
{
- printf("%s\n", exception_name[20]);
- panic();
+ panic("%s\n", exception_name[20]);
}
void isr21_handler(uint64_t error)
{
- printf("%s\n", exception_name[21]);
- printf("error: %d\n", error);
- panic();
+ panic("%s, error: %d\n", exception_name[21], error);
}
void isr22_handler(void)
{
- printf("%s\n", exception_name[22]);
- panic();
+ panic("%s\n", exception_name[22]);
}
void isr23_handler(void)
{
- printf("%s\n", exception_name[23]);
- panic();
+ panic("%s\n", exception_name[23]);
}
void isr24_handler(void)
{
- printf("%s\n", exception_name[24]);
- panic();
+ panic("%s\n", exception_name[24]);
}
void isr25_handler(void)
{
- printf("%s\n", exception_name[25]);
- panic();
+ panic("%s\n", exception_name[25]);
}
void isr26_handler(void)
{
- printf("%s\n", exception_name[26]);
- panic();
+ panic("%s\n", exception_name[26]);
}
void isr27_handler(void)
{
- printf("%s\n", exception_name[27]);
- panic();
+ panic("%s\n", exception_name[27]);
}
void isr28_handler(void)
{
- printf("%s\n", exception_name[28]);
- panic();
+ panic("%s\n", exception_name[28]);
}
void isr29_handler(uint64_t error)
{
- printf("%s\n", exception_name[29]);
- printf("error: %d\n", error);
- panic();
+ panic("%s, error: %d\n", exception_name[29], error);
}
void isr30_handler(uint64_t error)
{
- printf("%s\n", exception_name[30]);
- printf("error: %d\n", error);
- panic();
+ panic("%s, error: %d\n", exception_name[30], error);
}
void isr31_handler(void)
{
- printf("%s\n", exception_name[31]);
- panic();
+ panic("%s\n", exception_name[31]);
}
void irq0_handler(void)
diff --git a/kernel/src/cpu/irq_stub.S b/kernel/src/cpu/irq_stub.S
index 5a8149c..f8a05b6 100644
--- a/kernel/src/cpu/irq_stub.S
+++ b/kernel/src/cpu/irq_stub.S
@@ -1,3 +1,5 @@
+.extern panic_rsp
+
.macro pushall
push %rax
push %rcx
@@ -29,6 +31,7 @@
isr\number:
pushall
cld
+ mov %rsp, panic_rsp
call isr\number\()_handler
popall
iretq
@@ -40,6 +43,7 @@ isr\number:
pushall
mov 0x50(%rsp), %rdi
cld
+ mov %rsp, panic_rsp
call isr\number\()_handler
popall
add $8, %rsp
@@ -84,6 +88,7 @@ isr_no_error 31
irq\number:
pushall
cld
+ mov %rsp, panic_rsp
call irq\number\()_handler
popall
iretq
diff --git a/kernel/src/cpu/registers.c b/kernel/src/cpu/registers.c
index 03efcdf..997d4af 100644
--- a/kernel/src/cpu/registers.c
+++ b/kernel/src/cpu/registers.c
@@ -1,32 +1,7 @@
#include <types.h>
-#include <libk/serial_stdio.h>
+#include <libk/stdio.h>
+#include <registers.h>
-struct registers_t {
- uint64_t rax;
- uint64_t rbx;
- uint64_t rcx;
- uint64_t rdx;
- uint64_t rsi;
- uint64_t rdi;
- uint64_t rsp;
- uint64_t rbp;
- uint64_t r8;
- uint64_t r9;
- uint64_t r10;
- uint64_t r11;
- uint64_t r12;
- uint64_t r13;
- uint64_t r14;
- uint64_t r15;
- uint64_t rip;
- uint16_t cs;
- uint16_t ds;
- uint16_t ss;
- uint16_t es;
- uint16_t fs;
- uint16_t gs;
-};
-typedef struct registers_t registers_t;
void print_reg(registers_t* registers)
{
diff --git a/kernel/src/cpu/tss.c b/kernel/src/cpu/tss.c
index a1224f6..0dfa18e 100644
--- a/kernel/src/cpu/tss.c
+++ b/kernel/src/cpu/tss.c
@@ -1,6 +1,7 @@
#include <tss.h>
#include <heap.h>
#include <libk/stdio.h>
+#include <libk/string.h>
tss_type tss;