aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/boot/initialize_runtime.cpp
blob: b08c13ce8f750e0c72a76bb923c3e9bb2e7b59fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <algorithm>
#include <functional>
#include <span>

namespace arch::boot
{

  extern "C"
  {
    using global_initializer = auto (*)() -> void;

    extern global_initializer __init_array_start;
    extern global_initializer __init_array_end;

    auto invoke_global_constructors() -> void
    {
      auto initializers = std::span{&__init_array_start, &__init_array_end};
      std::ranges::for_each(initializers, [](auto invokable) { std::invoke(invokable); });
    }
  }

}  // namespace arch::boot