diff --git a/Kernel/Panic.cpp b/Kernel/Panic.cpp index d1cb615973..5e754b7c32 100644 --- a/Kernel/Panic.cpp +++ b/Kernel/Panic.cpp @@ -6,16 +6,29 @@ #include #include +#include #include #include namespace Kernel { +[[noreturn]] static void __reset() +{ + // FIXME: This works for i686/x86_64, but needs to be ported to any other arch when needed. + asm( + "lidt 0\n" + "movl $0, 0\n"); + + __builtin_unreachable(); +} + void __panic(const char* file, unsigned int line, const char* function) { critical_dmesgln("at {}:{} in {}", file, line, function); dump_backtrace(); - Processor::halt(); + if (kernel_command_line().boot_mode() == BootMode::SelfTest) + __reset(); + else + Processor::halt(); } - }