aboutsummaryrefslogtreecommitdiffstats
path: root/roms/edk2/ArmPkg/Library/CompilerIntrinsicsLib/memset.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/edk2/ArmPkg/Library/CompilerIntrinsicsLib/memset.c')
-rw-r--r--roms/edk2/ArmPkg/Library/CompilerIntrinsicsLib/memset.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/roms/edk2/ArmPkg/Library/CompilerIntrinsicsLib/memset.c b/roms/edk2/ArmPkg/Library/CompilerIntrinsicsLib/memset.c
new file mode 100644
index 000000000..24398d591
--- /dev/null
+++ b/roms/edk2/ArmPkg/Library/CompilerIntrinsicsLib/memset.c
@@ -0,0 +1,55 @@
+//------------------------------------------------------------------------------
+//
+// Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+//------------------------------------------------------------------------------
+
+typedef __SIZE_TYPE__ size_t;
+
+static __attribute__((__used__))
+void *__memset(void *s, int c, size_t n)
+{
+ unsigned char *d = s;
+
+ while (n--)
+ *d++ = c;
+
+ return s;
+}
+
+//
+// Other modules (such as CryptoPkg/IntrinsicLib) may provide another
+// implementation of memset(), which may conflict with this one if this
+// object was pulled into the link due to the definitions below. So make
+// our memset() 'weak' to let the other implementation take precedence.
+//
+__attribute__((__weak__, __alias__("__memset")))
+void *memset(void *dest, int c, size_t n);
+
+#ifdef __arm__
+
+void __aeabi_memset(void *dest, size_t n, int c)
+{
+ __memset(dest, c, n);
+}
+
+__attribute__((__alias__("__aeabi_memset")))
+void __aeabi_memset4(void *dest, size_t n, int c);
+
+__attribute__((__alias__("__aeabi_memset")))
+void __aeabi_memset8(void *dest, size_t n, int c);
+
+void __aeabi_memclr(void *dest, size_t n)
+{
+ __memset(dest, 0, n);
+}
+
+__attribute__((__alias__("__aeabi_memclr")))
+void __aeabi_memclr4(void *dest, size_t n);
+
+__attribute__((__alias__("__aeabi_memclr")))
+void __aeabi_memclr8(void *dest, size_t n);
+
+#endif