diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-11-29 11:55:47 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-11-29 11:57:20 +0100 |
| commit | d36487d9fd2c19b54a3b97bdf3562a17184711fe (patch) | |
| tree | 63c6d641925e7a78a9cb9ff89562c26b77b2bf3b /kernel/src/cpu | |
| parent | 450b9160fdcdb0b770b316caf1d72ab893bc7aa5 (diff) | |
kernel panic
Diffstat (limited to 'kernel/src/cpu')
| -rw-r--r-- | kernel/src/cpu/irq.c | 104 | ||||
| -rw-r--r-- | kernel/src/cpu/irq_stub.S | 5 | ||||
| -rw-r--r-- | kernel/src/cpu/registers.c | 29 | ||||
| -rw-r--r-- | kernel/src/cpu/tss.c | 1 |
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; |
