From d39920b62e3e0371c5698aae2c316671130b0956 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Tue, 16 Mar 2021 12:34:18 +0200 Subject: Switch lto to full --- libk/stdlib/memory.cc | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 libk/stdlib/memory.cc (limited to 'libk/stdlib') diff --git a/libk/stdlib/memory.cc b/libk/stdlib/memory.cc new file mode 100644 index 0000000..c197519 --- /dev/null +++ b/libk/stdlib/memory.cc @@ -0,0 +1,47 @@ +#include + +void operator delete(void*) { + printk("Calling delete\n"); + abort(); +} + +extern "C" void __cxa_pure_virtual() { + printk("__cxa_pure_virtual\n"); + abort(); +} + +extern "C" void* memcpy(void* dstptr, const void* srcptr, const size_t n) { + auto* dst = static_cast(dstptr); + const auto* src = static_cast(srcptr); + for (size_t i = 0; i < n; ++i) dst[i] = src[i]; + return dstptr; +} + +extern "C" void* memset(void* bufptr, const int value, const size_t n) { + auto* buf = static_cast(bufptr); + for (size_t i = 0; i < n; ++i) buf[i] = static_cast(value); + return bufptr; +} + +extern "C" void* memmove(void* dstptr, const void* srcptr, const size_t n) { + auto* dst = static_cast(dstptr); + const auto* src = static_cast(srcptr); + if (dst < src) { + for (size_t i = 0; i < n; ++i) dst[i] = src[i]; + } else { + for (size_t i = n; i != 0; i--) dst[i - 1] = src[i - 1]; + } + return dstptr; +} + +extern "C" int memcmp(const void* aptr, const void* bptr, const size_t n) { + const auto* a = static_cast(aptr); + const auto* b = static_cast(bptr); + for (size_t i = 0; i < n; ++i) { + if (a[i] < b[i]) + return -1; + else if (b[i] < a[i]) + return 1; + } + return 0; +} -- cgit v1.2.1