From d36487d9fd2c19b54a3b97bdf3562a17184711fe Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Tue, 29 Nov 2022 11:55:47 +0100 Subject: kernel panic --- kernel/src/cpu/irq.c | 104 ++++++++++++++------------------------------- kernel/src/cpu/irq_stub.S | 5 +++ kernel/src/cpu/registers.c | 29 +------------ kernel/src/cpu/tss.c | 1 + 4 files changed, 40 insertions(+), 99 deletions(-) (limited to 'kernel/src/cpu') 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 -#include +#include +#include -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 #include #include +#include tss_type tss; -- cgit v1.2.3