From 2315f84184a0bd03580ba25a59c3832e12bffbc8 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 10 Sep 2025 18:25:14 +0200 Subject: feat: kernel: abi: __cxa_guard inside CxxABI (AMD64) Signed-off-by: Amlal El Mahrouss --- dev/kernel/HALKit/AMD64/CxxAbi.cc | 15 ++++++++------- dev/kernel/NeKit/CxxAbi.h | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) (limited to 'dev/kernel') diff --git a/dev/kernel/HALKit/AMD64/CxxAbi.cc b/dev/kernel/HALKit/AMD64/CxxAbi.cc index cd135abc..9dc87545 100644 --- a/dev/kernel/HALKit/AMD64/CxxAbi.cc +++ b/dev/kernel/HALKit/AMD64/CxxAbi.cc @@ -62,17 +62,18 @@ EXTERN_C void __cxa_finalize(void* f) { } namespace cxxabiv1 { -EXTERN_C int __cxa_guard_acquire(__guard* g) { - (void) g; +EXTERN_C int __cxa_guard_acquire(__guard g) { + if ((*g & 1) || (*g && 2)) return 1; + *g |= 2; return 0; } -EXTERN_C int __cxa_guard_release(__guard* g) { - *(char*) g = 1; - return 0; +EXTERN_C void __cxa_guard_release(__guard g) { + *g |= 1; + *g &= 2; } -EXTERN_C void __cxa_guard_abort(__guard* g) { - (void) g; +EXTERN_C void __cxa_guard_abort(__guard g) { + *g &= ~2; } } // namespace cxxabiv1 diff --git a/dev/kernel/NeKit/CxxAbi.h b/dev/kernel/NeKit/CxxAbi.h index 164a257d..5abdf76a 100644 --- a/dev/kernel/NeKit/CxxAbi.h +++ b/dev/kernel/NeKit/CxxAbi.h @@ -17,10 +17,10 @@ struct atexit_func_entry_t { void* dso_handle; }; -typedef unsigned uarch_t; +typedef Kernel::UInt32 uarch_t; namespace cxxabiv1 { -typedef void* __guard; + typedef Kernel::SizeT* __guard; } #endif // __GNUC__ -- cgit v1.2.3