implement arm eabi mem* functions
authorTimo Teräs <timo.teras@iki.fi>
Sun, 30 Aug 2015 15:58:26 +0000 (18:58 +0300)
committerRich Felker <dalias@aerifal.cx>
Mon, 31 Aug 2015 06:35:01 +0000 (06:35 +0000)
these functions are part of the ARM EABI, meaning compilers may
generate references to them. known versions of gcc do not use them,
but llvm does. they are not provided by libgcc, and the de facto
standard seems to be that libc provides them.

arch/arm/src/__aeabi_memclr.c [new file with mode: 0644]
arch/arm/src/__aeabi_memcpy.c [new file with mode: 0644]
arch/arm/src/__aeabi_memmove.c [new file with mode: 0644]
arch/arm/src/__aeabi_memset.c [new file with mode: 0644]

diff --git a/arch/arm/src/__aeabi_memclr.c b/arch/arm/src/__aeabi_memclr.c
new file mode 100644 (file)
index 0000000..a25306d
--- /dev/null
@@ -0,0 +1,9 @@
+#include <string.h>
+#include "libc.h"
+
+void __aeabi_memclr(void *dest, size_t n)
+{
+       memset(dest, 0, n);
+}
+weak_alias(__aeabi_memclr, __aeabi_memclr4);
+weak_alias(__aeabi_memclr, __aeabi_memclr8);
diff --git a/arch/arm/src/__aeabi_memcpy.c b/arch/arm/src/__aeabi_memcpy.c
new file mode 100644 (file)
index 0000000..4ae5c77
--- /dev/null
@@ -0,0 +1,9 @@
+#include <string.h>
+#include "libc.h"
+
+void __aeabi_memcpy(void *restrict dest, const void *restrict src, size_t n)
+{
+       memcpy(dest, src, n);
+}
+weak_alias(__aeabi_memcpy, __aeabi_memcpy4);
+weak_alias(__aeabi_memcpy, __aeabi_memcpy8);
diff --git a/arch/arm/src/__aeabi_memmove.c b/arch/arm/src/__aeabi_memmove.c
new file mode 100644 (file)
index 0000000..951e7d3
--- /dev/null
@@ -0,0 +1,9 @@
+#include <string.h>
+#include "libc.h"
+
+void __aeabi_memmove(void *dest, const void *src, size_t n)
+{
+       memmove(dest, src, n);
+}
+weak_alias(__aeabi_memmove, __aeabi_memmove4);
+weak_alias(__aeabi_memmove, __aeabi_memmove8);
diff --git a/arch/arm/src/__aeabi_memset.c b/arch/arm/src/__aeabi_memset.c
new file mode 100644 (file)
index 0000000..8929975
--- /dev/null
@@ -0,0 +1,9 @@
+#include <string.h>
+#include "libc.h"
+
+void __aeabi_memset(void *dest, size_t n, int c)
+{
+       memset(dest, c, n);
+}
+weak_alias(__aeabi_memset, __aeabi_memset4);
+weak_alias(__aeabi_memset, __aeabi_memset8);