From 9e0fc222c4ebe975a236dea1171583164f957eef Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Sat, 21 Oct 2023 13:30:26 +0200 Subject: [PATCH] osdev copy paste cpp things --- src/arch/x86/CMakeLists.txt | 3 ++- src/arch/x86/cppsupport.cpp | 52 +++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/arch/x86/cppsupport.cpp diff --git a/src/arch/x86/CMakeLists.txt b/src/arch/x86/CMakeLists.txt index 98e4e50b5..845e1d93e 100644 --- a/src/arch/x86/CMakeLists.txt +++ b/src/arch/x86/CMakeLists.txt @@ -21,7 +21,8 @@ target_sources(kernel.elf PRIVATE paging.cpp kmain.cpp gdt.cpp - misc.cpp) + misc.cpp + cppsupport.cpp) target_include_directories(kernel.elf PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/arch/x86/cppsupport.cpp b/src/arch/x86/cppsupport.cpp new file mode 100644 index 000000000..45bef693d --- /dev/null +++ b/src/arch/x86/cppsupport.cpp @@ -0,0 +1,52 @@ +// +// Created by Stepan Usatiuk on 21.10.2023. +// + +#include + +#include "kmem.hpp" +#include "misc.hpp" + +extern "C" void __cxa_pure_virtual() { + // Do nothing or print an error message. +} + +// TODO: rewrite for multiprocessing +namespace __cxxabiv1 { + /* guard variables */ + + /* The ABI requires a 64-bit type. */ + __extension__ typedef int __guard __attribute__((mode(__DI__))); + + extern "C" int __cxa_guard_acquire(__guard *); + extern "C" void __cxa_guard_release(__guard *); + extern "C" void __cxa_guard_abort(__guard *); + + extern "C" int __cxa_guard_acquire(__guard *g) { + return !*(char *) (g); + } + + extern "C" void __cxa_guard_release(__guard *g) { + *(char *) g = 1; + } + + extern "C" void __cxa_guard_abort(__guard *) { + _hcf(); + } +}// namespace __cxxabiv1 + +void *operator new(size_t size) { + return kmalloc(size); +} + +void *operator new[](size_t size) { + return kmalloc(size); +} + +void operator delete(void *p) { + kfree(p); +} + +void operator delete[](void *p) { + kfree(p); +} \ No newline at end of file