From 636858dbbd48ed9f5073793b46740302aa202f43 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Tue, 28 Nov 2023 20:07:50 +0100 Subject: Kernel: Add basic IPC and move to microkernel design. The IPC design is currently a WIP and is nowhere near complete --- kernel/libc/exit/assert.c | 4 ++-- kernel/libc/include/assert.h | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'kernel/libc') diff --git a/kernel/libc/exit/assert.c b/kernel/libc/exit/assert.c index b48773a..3351249 100644 --- a/kernel/libc/exit/assert.c +++ b/kernel/libc/exit/assert.c @@ -1,12 +1,12 @@ #include #include #include -#include -void aFailed(char *f, int l) { +__attribute__((__noreturn__)) void aFailed(char *f, int l) { kprintf("Assert failed\n"); kprintf("%s : %d\n", f, l); dump_backtrace(10); + asm("hlt"); for (;;) ; } diff --git a/kernel/libc/include/assert.h b/kernel/libc/include/assert.h index 90a0be4..d6525f0 100644 --- a/kernel/libc/include/assert.h +++ b/kernel/libc/include/assert.h @@ -1,10 +1,16 @@ #include #include +// This infinite loop is needed for GCC to understand that +// aFailed does not return. No clue why the attribute does +// help solve the issue. #define assert(expr) \ { \ - if (!(expr)) \ + if (!(expr)) { \ aFailed(__FILE__, __LINE__); \ + for (;;) \ + ; \ + } \ } #define ASSERT_BUT_FIXME_PROPOGATE(expr) \ -- cgit v1.2.3