diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2026-03-14 08:00:45 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2026-03-14 08:04:00 +0100 |
| commit | bf2892edf4185326c0d47d16106eaead05859f07 (patch) | |
| tree | 5d7e67998c380d2a48915432fe5f163627ceda99 | |
| parent | 999f4e4dc191eb710abfc691043c5a0da9eadeea (diff) | |
[CHORE] Implemented atexit for BootZ.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
| -rw-r--r-- | src/boot/src/BootSupport.cpp | 19 | ||||
| -rw-r--r-- | src/kernel/HALKit/AMD64/CxxAbi.cpp | 5 |
2 files changed, 21 insertions, 3 deletions
diff --git a/src/boot/src/BootSupport.cpp b/src/boot/src/BootSupport.cpp index 4ef887bb..232ac965 100644 --- a/src/boot/src/BootSupport.cpp +++ b/src/boot/src/BootSupport.cpp @@ -12,9 +12,26 @@ #include <KernelKit/PE.h> #ifdef __BOOTZ_STANDALONE__ + +#define kAtExitMaxDestructors (128U) + +typedef struct atexit_func_entry { + void(*destructor_func)(); +} atexit_func_entry_t; + +typedef long long uarch_t; + +atexit_func_entry_t __atexit_funcs[kAtExitMaxDestructors]; +uarch_t __atexit_func_count; + /// @note This function is a stub, not implemented by the bootloader as of right now. (AMLALE) EXTERN_C int atexit(void (*f)()) { - NE_UNUSED(f); + if (__atexit_func_count >= kAtExitMaxDestructors) return 1; + + __atexit_funcs[__atexit_func_count].destructor_func = f; + + __atexit_func_count++; + return 0; } diff --git a/src/kernel/HALKit/AMD64/CxxAbi.cpp b/src/kernel/HALKit/AMD64/CxxAbi.cpp index 26192f91..50b6ccf2 100644 --- a/src/kernel/HALKit/AMD64/CxxAbi.cpp +++ b/src/kernel/HALKit/AMD64/CxxAbi.cpp @@ -8,8 +8,9 @@ #include <KernelKit/UserProcessScheduler.h> #include <NeKit/CxxAbi.h> -atexit_func_entry_t __atexit_funcs[kAtExitMacDestructors]; +#define kAtExitMaxDestructors (128U) +atexit_func_entry_t __atexit_funcs[kAtExitMaxDestructors]; uarch_t __atexit_func_count; /// @brief dynamic shared object Handle. @@ -31,7 +32,7 @@ EXTERN_C void ___chkstk_ms(PtrDiff frame_size) { } EXTERN_C int atexit(void (*f)()) { - if (__atexit_func_count >= kAtExitMacDestructors) return 1; + if (__atexit_func_count >= kAtExitMaxDestructors) return 1; __atexit_funcs[__atexit_func_count].destructor_func = f; |
