Kernel: Add some more cxxabi functionality

We can now declate static variables in functions
This commit is contained in:
Bananymous 2023-02-02 15:50:26 +02:00
parent f6b05212e0
commit 6cbad718fb
1 changed files with 33 additions and 0 deletions

View File

@ -1,3 +1,7 @@
#include <kernel/LockGuard.h>
#include <kernel/Panic.h>
#include <kernel/SpinLock.h>
#define ATEXIT_MAX_FUNCS 128 #define ATEXIT_MAX_FUNCS 128
#ifdef __cplusplus #ifdef __cplusplus
@ -109,6 +113,35 @@ void __cxa_finalize(void *f)
}; };
}; };
namespace __cxxabiv1
{
/* guard variables */
static Kernel::SpinLock s_spin_lock;
/* The ABI requires a 64-bit type. */
__extension__ typedef int __guard __attribute__((mode(__DI__)));
int __cxa_guard_acquire (__guard* g)
{
Kernel::LockGuard lock_guard(s_spin_lock);
return !*(int*)g;
}
void __cxa_guard_release (__guard* g)
{
Kernel::LockGuard lock_guard(s_spin_lock);
*(int*)g = 1;
}
void __cxa_guard_abort (__guard*)
{
Kernel::panic("__cxa_guard_abort");
__builtin_unreachable();
}
}
#ifdef __cplusplus #ifdef __cplusplus
}; };
#endif #endif