CloverBootloader/rEFIt_UEFI/Platform/Posix/abort.cpp

68 lines
1.2 KiB
C++
Raw Normal View History

//#ifdef CLOVER_BUILD
2020-04-24 11:30:09 +02:00
//#include "../../Platform/BootLog.h"
#include <Platform.h>
//
//#ifdef __cplusplus
//extern "C" {
//#endif
//
//#include <Library/BaseLib.h> // for CpuDeadLoop
//
//#ifdef __cplusplus
//} // extern "C"
//#endif
//
//#else
//
//#include <Platform.h>
//
//#endif
2020-04-25 11:59:07 +02:00
#if defined(CLOVER_BUILD) || !defined(_MSC_VER)
void abort(void)
{
2020-04-24 11:30:09 +02:00
printf("A fatal error happened. System halted\n");
2020-04-16 11:09:22 +02:00
while (1) { // tis will avoid warning : Function declared 'noreturn' should not return
CpuDeadLoop();
2020-04-16 11:09:22 +02:00
}
}
2020-04-25 11:59:07 +02:00
#endif
bool stop_at_panic = true;
bool i_have_panicked = false;
/*
*
* Function panic_ seems useless. It's same as panic(). It's to be able to put a breakpoint in gdb with br panic_(). This is done in gdb_launch script in Qemu
*/
static void panic_(const char* format, VA_LIST va)
{
if ( format ) {
vprintf(format, va);
}
printf("A fatal error happened. System halted\n");
while (1) { // this will avoid warning : Function declared 'noreturn' should not return
CpuDeadLoop();
}
}
void panic(const char* format, ...)
{
if ( stop_at_panic ) {
VA_LIST va;
VA_START(va, format);
2020-04-24 12:37:50 +02:00
panic_(format, va); // panic doesn't return
2020-04-24 17:26:27 +02:00
// VA_END(va);
}else{
i_have_panicked = true;
}
}
void panic(void)
{
panic(nullptr);
}