rulimine/stage23/lib/panic.s2.c

39 lines
834 B
C
Raw Normal View History

#include <lib/print.h>
#include <lib/real.h>
#include <lib/trace.h>
2021-05-19 12:14:00 +05:30
#if defined (uefi)
# include <efi.h>
#endif
#include <lib/blib.h>
#include <lib/readline.h>
#include <lib/gterm.h>
#include <mm/pmm.h>
__attribute__((noreturn)) void panic(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
2021-05-10 23:06:39 +02:00
print("\033[31mPANIC\033[37;1m\033[0m: ");
vprint(fmt, args);
va_end(args);
print("\n");
print_stacktrace(NULL);
2021-03-02 10:23:43 +01:00
#if defined (bios)
print("System halted.");
rm_hcf();
2021-03-02 10:23:43 +01:00
#elif defined (uefi)
2021-05-19 11:56:43 +05:30
print("Press [ENTER] to return to firmware.");
while (getchar() != '\n');
2021-05-19 12:11:39 +05:30
fb_clear(&fbinfo);
// release all uefi memory and return to firmware
pmm_release_uefi_mem();
uefi_call_wrapper(gBS->Exit, 4, efi_image_handle, EFI_ABORTED, 0, NULL);
__builtin_unreachable();
2021-03-02 10:23:43 +01:00
#endif
}