summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2026-03-14 08:00:45 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2026-03-14 08:04:00 +0100
commitbf2892edf4185326c0d47d16106eaead05859f07 (patch)
tree5d7e67998c380d2a48915432fe5f163627ceda99
parent999f4e4dc191eb710abfc691043c5a0da9eadeea (diff)
[CHORE] Implemented atexit for BootZ.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--src/boot/src/BootSupport.cpp19
-rw-r--r--src/kernel/HALKit/AMD64/CxxAbi.cpp5
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;