summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel')
-rw-r--r--dev/kernel/HALKit/AMD64/CxxAbi.cc15
-rw-r--r--dev/kernel/NeKit/CxxAbi.h4
2 files changed, 10 insertions, 9 deletions
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__