From 19d9a04e36e7fb96eebe89e24311408460c29a70 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Mon, 30 Sep 2024 11:08:46 -0400 Subject: reorganize files --- src/boot.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/boot.cpp (limited to 'src/boot.cpp') diff --git a/src/boot.cpp b/src/boot.cpp new file mode 100644 index 0000000..6b1da6a --- /dev/null +++ b/src/boot.cpp @@ -0,0 +1,36 @@ +#include +#include +#include + +extern void (*__init_array_start)(); +extern void (*__init_array_end)(); +extern void kernel_main(); + +alignas(16) +static std::array stack; + +static void init_array() +{ + std::span initArray (&__init_array_start, &__init_array_end); + for (auto& fn : initArray) + fn(); +} + +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())); + + init_array(); + kernel_main(); + + asm volatile("cli"); + for (;;) + asm volatile("hlt"); +} + -- cgit v1.2.3