Move assertion failures out-of-line to reduce binary bloat.

This commit is contained in:
Andreas Kling 2018-11-04 13:12:58 +01:00
parent 7fe4063323
commit 8b4b684d6d
Notes: sideshowbarker 2024-07-19 18:33:56 +09:00
2 changed files with 10 additions and 1 deletions

View file

@ -447,3 +447,10 @@ void handleIRQ()
s_irqHandler[irq]->handleIRQ();
PIC::eoi(irq);
}
void __assertion_failed(const char* msg, const char* file, unsigned line, const char* func)
{
asm volatile("cli");
kprintf("ASSERTION FAILED: %s\n%s:%u in %s\n", msg, file, line, func);
asm volatile("hlt");
}

View file

@ -3,8 +3,10 @@
#include "kprintf.h"
#include "i386.h"
void __assertion_failed(const char* msg, const char* file, unsigned line, const char* func) NORETURN;
#define ASSERT(expr) (static_cast<bool>(expr) ? (void)0 : __assertion_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__))
#define CRASH() do { asm volatile("ud2"); } while(0)
#define ASSERT(x) do { if (!(x)) { asm volatile("cli"); kprintf("ASSERTION FAILED: " #x "\n%s:%u in %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); CRASH(); } } while(0)
#define RELEASE_ASSERT(x) do { if (!(x)) CRASH(); } while(0)
#define ASSERT_NOT_REACHED() ASSERT(false)
#define ASSERT_INTERRUPTS_DISABLED() ASSERT(!(cpuFlags() & 0x200))