diff options
author | Danny Holman <dholman@gymli.org> | 2025-01-12 01:17:36 -0600 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2025-01-12 01:19:11 -0600 |
commit | 95cd78840f0891e60f5ebecc8a8eb4fbaf3c2ebf (patch) | |
tree | c8c35347b50477929727fa5be9f5d0f55cbe18fd /kernel/core/panic.c | |
parent | 5e166f3042a8e7b3031aae4da7006f80caa53ecc (diff) |
PROJECT RESTRUCTURING
Move the entire kernel into its own directory. Create new directories
for system commands, libraries and other required essentials for a
complete Unix-like operating system.
Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'kernel/core/panic.c')
-rw-r--r-- | kernel/core/panic.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/kernel/core/panic.c b/kernel/core/panic.c new file mode 100644 index 0000000..a44a73c --- /dev/null +++ b/kernel/core/panic.c @@ -0,0 +1,31 @@ +#include <kernel/panic.h> +#include <kernel/spinlock.h> +#include <libk/io.h> +#include <stdint.h> +#include <stddef.h> + +static struct spinlock panic_lock = {0}; +static int panicked = 0; + +void walk_stack(uintptr_t *addrs, size_t n); + +void stack_trace(void) { + kprintf("PRINTING STACK TRACE\n"); + uintptr_t strace[32]; + walk_stack(strace, 32); + for (int i = 0; i < 32; i++) { + if (strace[i] == 0) + break; + kprintf("#%d: %x\n", i, strace[i]); + } +} + +void panic(const char *str) { + disable_ints(); + spin_lock(&panic_lock); + panicked = 1; + spin_unlock(&panic_lock); + kprintf("KERNEL PANIC - NOT SYNCING: %s\n", str); + stack_trace(); + while (1); +} |