aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/libc/cpp_support.cpp
diff options
context:
space:
mode:
authorspicyjpeg <thatspicyjpeg@gmail.com>2022-07-23 23:49:00 +0200
committerspicyjpeg <thatspicyjpeg@gmail.com>2022-07-23 23:49:00 +0200
commit0e755e9801a2dcf7b9827c90cc38e9f532d06393 (patch)
tree8037363ddfc9c03a67bdf0a1cdc3e11a3332687e /libpsn00b/libc/cpp_support.cpp
parent49ee8172ebb6c77071be113a01fc29c48b991479 (diff)
downloadpsn00bsdk-0e755e9801a2dcf7b9827c90cc38e9f532d06393.tar.gz
Replace default allocator with psyqo implementation
Diffstat (limited to 'libpsn00b/libc/cpp_support.cpp')
-rw-r--r--libpsn00b/libc/cpp_support.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/libpsn00b/libc/cpp_support.cpp b/libpsn00b/libc/cpp_support.cpp
new file mode 100644
index 0000000..f451044
--- /dev/null
+++ b/libpsn00b/libc/cpp_support.cpp
@@ -0,0 +1,55 @@
+/*
+ * PSn00bSDK C++ support library
+ * (C) 2019-2022 Lameguy64, spicyjpeg - MPL licensed
+ */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+/* GCC builtins */
+
+extern "C" void *__builtin_new(size_t size) {
+ return malloc(size);
+}
+
+extern "C" void __builtin_delete(void *ptr) {
+ free(ptr);
+}
+
+/* Default new/delete operators */
+
+void *operator new(size_t size) noexcept {
+ return malloc(size);
+}
+
+void *operator new[](size_t size) noexcept {
+ return malloc(size);
+}
+
+void operator delete(void *ptr) noexcept {
+ free(ptr);
+}
+
+void operator delete[](void *ptr) noexcept {
+ free(ptr);
+}
+
+// https://en.cppreference.com/w/cpp/memory/new/operator_delete
+void operator delete(void *ptr, size_t size) noexcept {
+ free(ptr);
+}
+
+void operator delete[](void *ptr, size_t size) noexcept {
+ free(ptr);
+}
+
+/* Placement new operators */
+
+void *operator new(size_t size, void *ptr) noexcept {
+ return ptr;
+}
+
+void *operator new[](size_t size, void *ptr) noexcept {
+ return ptr;
+}