aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/libc/cpp_support.cpp
diff options
context:
space:
mode:
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;
+}