#include #include extern void kernel_main(); alignas(16) std::array stack; extern "C" __attribute__((naked)) void _start() { asm volatile(R"( mov %%eax, multiboot_magic mov %%ebx, multiboot_ptr mov %0, %%esp )" :: "i" (stack.data() + stack.size())); extern std::uint32_t __init_array_start; extern std::uint32_t __init_array_end; auto it = &__init_array_start; while (it < &__init_array_end) { auto fn = reinterpret_cast(*it); fn(); ++it; } kernel_main(); asm volatile("cli"); for (;;) asm volatile("hlt"); }