]> git.dujemihanovic.xyz Git - nameless-os.git/commitdiff
Add panic facility
authorDuje Mihanović <duje.mihanovic@skole.hr>
Tue, 21 Jun 2022 14:04:59 +0000 (16:04 +0200)
committerDuje Mihanović <duje.mihanovic@skole.hr>
Wed, 22 Jun 2022 16:03:19 +0000 (18:03 +0200)
include/arch/x86/panic.h [new file with mode: 0644]
include/arch/x86/tty.h
kernel/arch/x86/irq/sample_handler.c
kernel/arch/x86/tty/tty.c
kernel/kernel.c

diff --git a/include/arch/x86/panic.h b/include/arch/x86/panic.h
new file mode 100644 (file)
index 0000000..c66d6c7
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef PANIC_H
+#define PANIC_H
+
+void halt()
+{
+       asm("cli":);
+loop:
+       asm("hlt":);
+       goto loop;
+}
+
+#define PANIC(msg) \
+       kprint("PANIC (", VGA_COLOR_BRIGHT_RED);\
+       kprint(msg, VGA_COLOR_BRIGHT_RED);\
+       kprint(") in ", VGA_COLOR_BRIGHT_RED);\
+       kprint(__FILE__, VGA_COLOR_BRIGHT_RED);\
+       kprintc(':', VGA_COLOR_BRIGHT_RED);\
+       kprintdec(__LINE__, VGA_COLOR_BRIGHT_RED);\
+       kprintc(':', VGA_COLOR_BRIGHT_RED);\
+       kprint(__func__, VGA_COLOR_BRIGHT_RED);\
+       kprint("()", VGA_COLOR_BRIGHT_RED);\
+       halt();
+
+#endif
index e1410695fa881a5f6811a30c38047a64a92e1e5d..f2049a236e34908b38f36d77f87aab63c338c3d4 100644 (file)
@@ -27,5 +27,5 @@ extern void kprintb(const uint8_t byte);
 extern void kprintw(const uint16_t word);
 extern void kprintd(const uint32_t dword);
 extern void kprintq(const uint64_t qword);
-extern int kprintdec(uint32_t num);
+extern int kprintdec(uint32_t num, uint8_t color);
 #endif
index 0ba022287400813058340d07504939dcc347e508..5b0e2d470217a767c0b02ddc295d4586e7e6fb84 100644 (file)
@@ -3,6 +3,7 @@
 #include <io.h>
 #include <stdint.h>
 #include <mm/paging.h>
+#include <panic.h>
 
 typedef uint32_t uword_t;
 
@@ -36,7 +37,7 @@ void pf_handler(struct fault_frame *frame)
        int address;
        struct pf_errcode errcode = frame->error_code;
        asm ("mov %%cr2, %0": "=a" (address));
-       kprint("A page fault occurred!\n", VGA_COLOR_DARK_RED);
+       kprint("A page fault occurred!\n", VGA_COLOR_BRIGHT_RED);
        kprint("Faulting address: ", 0);
        kprintd(address);
        kprint("\n", 0);
@@ -51,18 +52,12 @@ void pf_handler(struct fault_frame *frame)
        if (errcode.id) {
                kprint("Fault occurred while fetching instruction\n", 0);
        }
-       asm("cli");
-halt:
-       asm("hlt");
-       goto halt;
+       PANIC("page fault");
 }
 
 __attribute__((interrupt))
 void double_fault(struct abort_frame *frame)
 {
-       *(volatile uint32_t *) (0xb8000) = 0xcf28cf3a;
-halt:
-       asm volatile ("cli; hlt");
-       goto halt;
+       PANIC("double fault");
 }
 
index 861610dde3bc80b08231cc8cbe745abd96dfd615..c55cdd41eb8fe0c06afa792a63e9d2c0d767060f 100644 (file)
@@ -176,7 +176,7 @@ void kprintq(uint64_t qword)
        kprintc(hex_chars[temp], VGA_COLOR_LIGHT_GRAY);
 }
 
-int kprintdec(uint32_t num)
+int kprintdec(uint32_t num, uint8_t color)
 {
        char buffer[11];
        int digits = 10;
@@ -207,6 +207,6 @@ int kprintdec(uint32_t num)
                }
        }
 
-       kprint(buffer, 0);
+       kprint(buffer, color);
        return digits;
 }
index 16b2b404e9f009fbe4e0ed912612152c6b3aa3aa..9257a0e9cdedc7a251d84912414f5591c9c87976 100644 (file)
@@ -59,9 +59,5 @@ void kmain(struct e820_map *mmap, int mmap_size)
        pic_unmask(1);
        asm volatile ("sti");
        kprint("All done\n", 0);
-       kprintdec(12345);
-       kprintc('\n');
-       kprintdec(6789);
-       kprintc('\n');
        while(1);
 }