From 8174a8c538c1cd4771f23b1b2ee59f897b7b23d5 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 17 Jul 2025 07:44:37 +0100 Subject: feat: Update tooling from btb to nebuild. Moved platform specific ABI into their own HAL. Signed-off-by: Amlal El Mahrouss --- dev/kernel/HALKit/AMD64/CxxAbi.cc | 78 ++++++++++++++++++++++++++++++ dev/kernel/HALKit/ARM64/APM/APM+IO.cc | 2 +- dev/kernel/HALKit/ARM64/CxxAbi.cc | 88 +++++++++++++++++++++++++++++++++ dev/kernel/src/CxxAbi-AMD64.cc | 82 ------------------------------- dev/kernel/src/CxxAbi-ARM64.cc | 91 ----------------------------------- 5 files changed, 167 insertions(+), 174 deletions(-) create mode 100644 dev/kernel/HALKit/AMD64/CxxAbi.cc create mode 100644 dev/kernel/HALKit/ARM64/CxxAbi.cc delete mode 100644 dev/kernel/src/CxxAbi-AMD64.cc delete mode 100644 dev/kernel/src/CxxAbi-ARM64.cc (limited to 'dev/kernel') diff --git a/dev/kernel/HALKit/AMD64/CxxAbi.cc b/dev/kernel/HALKit/AMD64/CxxAbi.cc new file mode 100644 index 00000000..cd135abc --- /dev/null +++ b/dev/kernel/HALKit/AMD64/CxxAbi.cc @@ -0,0 +1,78 @@ +/* ------------------------------------------- + + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include +#include + +atexit_func_entry_t __atexit_funcs[kAtExitMacDestructors]; + +uarch_t __atexit_func_count; + +/// @brief dynamic shared object Handle. +Kernel::UIntPtr __dso_handle; + +EXTERN_C Kernel::Void __cxa_pure_virtual(void* self) { + (Kernel::Void)(Kernel::kout << "object: " + << Kernel::number(reinterpret_cast(self))); + (Kernel::Void)(Kernel::kout << ", has unimplemented virtual functions.\r"); +} + +EXTERN_C void ___chkstk_ms(PtrDiff frame_size) { + char* sp; + asm volatile("mov %%rsp, %0" : "=r"(sp)); + + for (PtrDiff offset = kPageSize; offset < frame_size; offset += kPageSize) { + sp[-offset] = 0; + } +} + +EXTERN_C int atexit(void (*f)()) { + if (__atexit_func_count >= kAtExitMacDestructors) return 1; + + __atexit_funcs[__atexit_func_count].destructor_func = f; + + __atexit_func_count++; + + return 0; +} + +EXTERN_C void __cxa_finalize(void* f) { + uarch_t i = __atexit_func_count; + if (!f) { + while (i--) { + if (__atexit_funcs[i].destructor_func) { + (*__atexit_funcs[i].destructor_func)(); + }; + } + + return; + } + + while (i--) { + if (__atexit_funcs[i].destructor_func) { + (*__atexit_funcs[i].destructor_func)(); + __atexit_funcs[i].destructor_func = 0; + }; + } +} + +namespace cxxabiv1 { +EXTERN_C int __cxa_guard_acquire(__guard* g) { + (void) g; + return 0; +} + +EXTERN_C int __cxa_guard_release(__guard* g) { + *(char*) g = 1; + return 0; +} + +EXTERN_C void __cxa_guard_abort(__guard* g) { + (void) g; +} +} // namespace cxxabiv1 diff --git a/dev/kernel/HALKit/ARM64/APM/APM+IO.cc b/dev/kernel/HALKit/ARM64/APM/APM+IO.cc index e58fb782..17a60515 100644 --- a/dev/kernel/HALKit/ARM64/APM/APM+IO.cc +++ b/dev/kernel/HALKit/ARM64/APM/APM+IO.cc @@ -9,7 +9,7 @@ using namespace Kernel; -/// @brief Send APM command to it's IO space. +/// @brief Send APM command to its IO space. /// @param base_dma the IO base port. /// @param cmd the command. /// @return status code. diff --git a/dev/kernel/HALKit/ARM64/CxxAbi.cc b/dev/kernel/HALKit/ARM64/CxxAbi.cc new file mode 100644 index 00000000..09898b08 --- /dev/null +++ b/dev/kernel/HALKit/ARM64/CxxAbi.cc @@ -0,0 +1,88 @@ +/* ------------------------------------------- + + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include + +atexit_func_entry_t __atexit_funcs[kAtExitMacDestructors]; + +uarch_t __atexit_func_count; + +/// @brief dynamic shared object Handle. +Kernel::UIntPtr __dso_handle; + +EXTERN_C void __chkstk(void) {} + +EXTERN_C int atexit(void (*f)(), void* arg, void* dso) { + if (__atexit_func_count >= kAtExitMacDestructors) return 1; + + __atexit_funcs[__atexit_func_count].destructor_func = f; + __atexit_funcs[__atexit_func_count].obj_ptr = arg; + __atexit_funcs[__atexit_func_count].dso_handle = dso; + + __atexit_func_count++; + + return 0; +} + +EXTERN_C void __cxa_finalize(void* f) { + uarch_t i = __atexit_func_count; + if (!f) { + while (i--) { + if (__atexit_funcs[i].destructor_func) { + (*__atexit_funcs[i].destructor_func)(); + __atexit_funcs[i].destructor_func = 0; + }; + } + + return; + } + + while (i--) { + if (__atexit_funcs[i].destructor_func) { + (*__atexit_funcs[i].destructor_func)(); + __atexit_funcs[i].destructor_func = 0; + }; + } +} + +namespace cxxabiv1 { +EXTERN_C int __cxa_guard_acquire(__guard* g) { + (void) g; + return 0; +} + +EXTERN_C int __cxa_guard_release(__guard* g) { + *(char*) g = 1; + return 0; +} + +EXTERN_C void __cxa_guard_abort(__guard* g) { + (void) g; +} +} // namespace cxxabiv1 + +EXTERN_C Kernel::Void _purecall(void* self) { + (Kernel::Void)(Kernel::kout << "object: " + << Kernel::number(reinterpret_cast(self))); + (Kernel::Void)(Kernel::kout << ", has unimplemented virtual functions.\r"); +} + +EXTERN_C Kernel::Void _Init_thread_footer(Kernel::Int* thread_obj) { + NE_UNUSED(thread_obj); +} + +EXTERN_C Kernel::Void _Init_thread_epoch(Kernel::Void) { + NE_UNUSED(0); +} + +EXTERN_C Kernel::Void _Init_thread_header(Kernel::Int* thread_obj) { + NE_UNUSED(0); +} + +EXTERN_C Kernel::Int _tls_index = 0UL; + diff --git a/dev/kernel/src/CxxAbi-AMD64.cc b/dev/kernel/src/CxxAbi-AMD64.cc deleted file mode 100644 index 30c8306e..00000000 --- a/dev/kernel/src/CxxAbi-AMD64.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. - -------------------------------------------- */ - -#ifdef __NE_AMD64__ - -#include -#include -#include -#include - -atexit_func_entry_t __atexit_funcs[kAtExitMacDestructors]; - -uarch_t __atexit_func_count; - -/// @brief dynamic shared object Handle. -Kernel::UIntPtr __dso_handle; - -EXTERN_C Kernel::Void __cxa_pure_virtual(void* self) { - (Kernel::Void)(Kernel::kout << "object: " - << Kernel::number(reinterpret_cast(self))); - (Kernel::Void)(Kernel::kout << ", has unimplemented virtual functions.\r"); -} - -EXTERN_C void ___chkstk_ms(PtrDiff frame_size) { - char* sp; - asm volatile("mov %%rsp, %0" : "=r"(sp)); - - for (PtrDiff offset = kPageSize; offset < frame_size; offset += kPageSize) { - sp[-offset] = 0; - } -} - -EXTERN_C int atexit(void (*f)()) { - if (__atexit_func_count >= kAtExitMacDestructors) return 1; - - __atexit_funcs[__atexit_func_count].destructor_func = f; - - __atexit_func_count++; - - return 0; -} - -EXTERN_C void __cxa_finalize(void* f) { - uarch_t i = __atexit_func_count; - if (!f) { - while (i--) { - if (__atexit_funcs[i].destructor_func) { - (*__atexit_funcs[i].destructor_func)(); - }; - } - - return; - } - - while (i--) { - if (__atexit_funcs[i].destructor_func) { - (*__atexit_funcs[i].destructor_func)(); - __atexit_funcs[i].destructor_func = 0; - }; - } -} - -namespace cxxabiv1 { -EXTERN_C int __cxa_guard_acquire(__guard* g) { - (void) g; - return 0; -} - -EXTERN_C int __cxa_guard_release(__guard* g) { - *(char*) g = 1; - return 0; -} - -EXTERN_C void __cxa_guard_abort(__guard* g) { - (void) g; -} -} // namespace cxxabiv1 - -#endif // ifdef __NE_AMD64__ diff --git a/dev/kernel/src/CxxAbi-ARM64.cc b/dev/kernel/src/CxxAbi-ARM64.cc deleted file mode 100644 index e91eb958..00000000 --- a/dev/kernel/src/CxxAbi-ARM64.cc +++ /dev/null @@ -1,91 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. - -------------------------------------------- */ - -#ifdef __NE_ARM64__ - -#include -#include -#include - -atexit_func_entry_t __atexit_funcs[kAtExitMacDestructors]; - -uarch_t __atexit_func_count; - -/// @brief dynamic shared object Handle. -Kernel::UIntPtr __dso_handle; - -EXTERN_C void __chkstk(void) {} - -EXTERN_C int atexit(void (*f)(), void* arg, void* dso) { - if (__atexit_func_count >= kAtExitMacDestructors) return 1; - - __atexit_funcs[__atexit_func_count].destructor_func = f; - __atexit_funcs[__atexit_func_count].obj_ptr = arg; - __atexit_funcs[__atexit_func_count].dso_handle = dso; - - __atexit_func_count++; - - return 0; -} - -EXTERN_C void __cxa_finalize(void* f) { - uarch_t i = __atexit_func_count; - if (!f) { - while (i--) { - if (__atexit_funcs[i].destructor_func) { - (*__atexit_funcs[i].destructor_func)(); - __atexit_funcs[i].destructor_func = 0; - }; - } - - return; - } - - while (i--) { - if (__atexit_funcs[i].destructor_func) { - (*__atexit_funcs[i].destructor_func)(); - __atexit_funcs[i].destructor_func = 0; - }; - } -} - -namespace cxxabiv1 { -EXTERN_C int __cxa_guard_acquire(__guard* g) { - (void) g; - return 0; -} - -EXTERN_C int __cxa_guard_release(__guard* g) { - *(char*) g = 1; - return 0; -} - -EXTERN_C void __cxa_guard_abort(__guard* g) { - (void) g; -} -} // namespace cxxabiv1 - -EXTERN_C Kernel::Void _purecall(void* self) { - (Kernel::Void)(Kernel::kout << "object: " - << Kernel::number(reinterpret_cast(self))); - (Kernel::Void)(Kernel::kout << ", has unimplemented virtual functions.\r"); -} - -EXTERN_C Kernel::Void _Init_thread_footer(Kernel::Int* thread_obj) { - NE_UNUSED(thread_obj); -} - -EXTERN_C Kernel::Void _Init_thread_epoch(Kernel::Void) { - NE_UNUSED(0); -} - -EXTERN_C Kernel::Void _Init_thread_header(Kernel::Int* thread_obj) { - NE_UNUSED(0); -} - -EXTERN_C Kernel::Int _tls_index = 0UL; - -#endif // ifdef __NE_ARM64__ -- cgit v1.2.3