diff --git a/src/libraries/libc/arch/amd64/crt/init.cpp b/src/libraries/libc/arch/amd64/crt/init.cpp index b183c01..603fa90 100644 --- a/src/libraries/libc/arch/amd64/crt/init.cpp +++ b/src/libraries/libc/arch/amd64/crt/init.cpp @@ -1,23 +1,31 @@ #include using cb = void (*)(void); -extern cb __init_array_start[0]; +extern cb __preinit_array_start; +extern cb __preinit_array_end; +extern cb __init_array_start; extern cb __init_array_end; namespace { void -run_global_ctors() +run_ctor_list(cb *array, cb *end) { size_t i = 0; while (true) { - const cb &fp = __init_array_start[i++]; - if (&fp == &__init_array_end) - return; - fp(); + const cb &ctor = array[i++]; + if (&ctor == end) return; + ctor(); } } +void +run_global_ctors() +{ + run_ctor_list(&__preinit_array_start, &__preinit_array_end); + run_ctor_list(&__init_array_start, &__init_array_end); +} + } // namespace extern "C"