Refactor panic handler and assertion failed display functions

This commit is contained in:
EnderIce2 2024-04-01 21:04:45 +03:00
parent 87e263f5fe
commit e09d93e2bb
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
3 changed files with 24 additions and 16 deletions

View File

@ -39,10 +39,11 @@
#include "../../kernel.h"
extern const char *x86ExceptionMnemonics[];
extern void DisplayCrashScreen(CPU::ExceptionFrame *Frame);
extern bool UserModeExceptionHandler(CPU::ExceptionFrame *Frame);
extern void DisplayCrashScreen(CPU::ExceptionFrame *);
extern bool UserModeExceptionHandler(CPU::ExceptionFrame *);
extern void DisplayStackSmashing();
extern void DisplayBufferOverflow();
extern void DisplayAssertionFailed(const char *, int, const char *);
Video::Font *CrashFont = nullptr;
void *FbBeforePanic = nullptr;
@ -350,3 +351,10 @@ nsa __noreturn void HandleBufferOverflow()
DisplayBufferOverflow();
CPU::Stop();
}
EXTERNC nsa __noreturn void HandleAssertionFailed(const char *File, int Line,
const char *Expression)
{
DisplayAssertionFailed(File, Line, Expression);
CPU::Stop();
}

View File

@ -742,8 +742,7 @@ nsa void DisplayBufferOverflow()
/* TODO: Add additional info */
}
EXTERNC nsa __noreturn void DisplayAssertionFailed(const char *File, int Line,
const char *Expression)
nsa void DisplayAssertionFailed(const char *File, int Line, const char *Expression)
{
InitFont();
Display->ClearBuffer();
@ -768,7 +767,8 @@ EXTERNC nsa __noreturn void DisplayAssertionFailed(const char *File, int Line,
ExPrint(" Please create a new issue on \e00AAFFhttps://github.com/Fennix-Project/Fennix\eFAFAFA for further assistance.\n");
Display->UpdateBuffer();
CPU::Stop();
/* TODO: Add additional info */
}
nsa void ArrowInput(uint8_t key)

View File

@ -20,18 +20,18 @@
#include <debug.h>
EXTERNC void __attribute__((noreturn)) DisplayAssertionFailed(const char *File, int Line,
const char *Expression);
EXTERNC void __attribute__((noreturn)) HandleAssertionFailed(const char *File, int Line,
const char *Expression);
#define assert(x) \
do \
{ \
if (__builtin_expect(!!(!(x)), 0)) \
{ \
error("Assertion failed! [%s]", #x); \
DisplayAssertionFailed(__FILE__, __LINE__, #x); \
__builtin_unreachable(); \
} \
#define assert(x) \
do \
{ \
if (__builtin_expect(!!(!(x)), 0)) \
{ \
error("Assertion failed! [%s]", #x); \
HandleAssertionFailed(__FILE__, __LINE__, #x); \
__builtin_unreachable(); \
} \
} while (0)
#define assert_allow_continue(x) \