#include "stdlib.h" constexpr size_t max_consoles = 4; static Console* global_console[max_consoles] = {nullptr}; static size_t last_console = 0; void Console::set(Console* ptr) { if (ptr != nullptr && last_console < max_consoles) { global_console[last_console++] = ptr; } } Iterator Console::begin() { return Iterator(global_console, last_console); } void abort() { /* * On gcc, a 'while(true) {}' will infinitely loop * but clang will optimize it away on -O2 if it's empty * therefore, add no-op */ while (true) { asm volatile("nop"); } __builtin_unreachable(); }