From 3721dadd726a2964d4fb19899678a4bf7eab3a48 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 15 Apr 2025 22:01:57 +0300 Subject: [PATCH] LibC: Make stdio and malloc initialization constructors --- userspace/libraries/LibC/malloc.cpp | 28 ++++++++++++++++++---------- userspace/libraries/LibC/stdio.cpp | 3 ++- userspace/libraries/LibC/unistd.cpp | 5 ----- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/userspace/libraries/LibC/malloc.cpp b/userspace/libraries/LibC/malloc.cpp index 92e5d0b3..0627529c 100644 --- a/userspace/libraries/LibC/malloc.cpp +++ b/userspace/libraries/LibC/malloc.cpp @@ -50,19 +50,27 @@ struct malloc_pool_t bool contains(malloc_node_t* node) { return start <= (uint8_t*)node && (uint8_t*)node < end(); } }; -static malloc_pool_t s_malloc_pools[s_malloc_pool_count]; - -void _init_malloc() +struct malloc_info_t { - size_t pool_size = s_malloc_pool_size_initial; - for (size_t i = 0; i < s_malloc_pool_count; i++) + consteval malloc_info_t() { - s_malloc_pools[i].start = nullptr; - s_malloc_pools[i].size = pool_size; - s_malloc_pools[i].free_list = nullptr;; - pool_size *= s_malloc_pool_size_multiplier; + size_t pool_size = s_malloc_pool_size_initial; + for (auto& pool : pools) + { + pool = { + .start = nullptr, + .size = pool_size, + .free_list = nullptr, + }; + pool_size *= s_malloc_pool_size_multiplier; + } } -} + + malloc_pool_t pools[s_malloc_pool_count]; +}; + +static malloc_info_t s_malloc_info; +static auto& s_malloc_pools = s_malloc_info.pools; static bool allocate_pool(size_t pool_index) { diff --git a/userspace/libraries/LibC/stdio.cpp b/userspace/libraries/LibC/stdio.cpp index 8d87f4e6..2786520f 100644 --- a/userspace/libraries/LibC/stdio.cpp +++ b/userspace/libraries/LibC/stdio.cpp @@ -94,7 +94,8 @@ static int drop_read_buffer(FILE* file) return 0; } -void _init_stdio() +__attribute__((constructor)) +static void _init_stdio() { for (size_t i = 0; i < FOPEN_MAX; i++) { diff --git a/userspace/libraries/LibC/unistd.cpp b/userspace/libraries/LibC/unistd.cpp index c90626e8..9d03f09e 100644 --- a/userspace/libraries/LibC/unistd.cpp +++ b/userspace/libraries/LibC/unistd.cpp @@ -19,8 +19,6 @@ char** __environ; extern char** environ __attribute__((weak, alias("__environ"))); -extern void _init_malloc(); -extern void _init_stdio(); extern "C" void _init_libc(char** _environ) { static bool is_initialized = false; @@ -28,9 +26,6 @@ extern "C" void _init_libc(char** _environ) return; is_initialized = true; - _init_malloc(); - _init_stdio(); - if (!_environ) return;