summaryrefslogtreecommitdiffstats
path: root/src/libgcc
diff options
context:
space:
mode:
authorMichael Brown2016-04-20 17:43:34 +0200
committerMichael Brown2016-04-20 17:46:24 +0200
commit55e409b14fdfc6bcd51cdcdaf1ee20ad5258215d (patch)
tree70174dda71202252cbaa2b504aa6cd64bb72efef /src/libgcc
parent[libc] Allow CPU architectures to use unoptimised string functions (diff)
downloadipxe-55e409b14fdfc6bcd51cdcdaf1ee20ad5258215d.tar.gz
ipxe-55e409b14fdfc6bcd51cdcdaf1ee20ad5258215d.tar.xz
ipxe-55e409b14fdfc6bcd51cdcdaf1ee20ad5258215d.zip
[libgcc] Provide symbol to handle gcc's implicit calls to memset()
On some architectures (such as ARM), gcc will insert implicit calls to memset(). Handle these using the same mechanism as for the implicit calls to memcpy() used by x86. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/libgcc')
-rw-r--r--src/libgcc/implicit.c26
-rw-r--r--src/libgcc/memcpy.c18
2 files changed, 26 insertions, 18 deletions
diff --git a/src/libgcc/implicit.c b/src/libgcc/implicit.c
new file mode 100644
index 00000000..645ae6d2
--- /dev/null
+++ b/src/libgcc/implicit.c
@@ -0,0 +1,26 @@
+/** @file
+ *
+ * gcc sometimes likes to insert implicit calls to memcpy() and
+ * memset(). Unfortunately, there doesn't seem to be any way to
+ * prevent it from doing this, or to force it to use the optimised
+ * versions as seen by C code; it insists on inserting symbol
+ * references to "memcpy" and "memset". We therefore include wrapper
+ * functions just to keep gcc happy.
+ *
+ */
+
+#include <string.h>
+
+void * gcc_implicit_memcpy ( void *dest, const void *src,
+ size_t len ) asm ( "memcpy" );
+
+void * gcc_implicit_memcpy ( void *dest, const void *src, size_t len ) {
+ return memcpy ( dest, src, len );
+}
+
+void * gcc_implicit_memset ( void *dest, int character,
+ size_t len ) asm ( "memset" );
+
+void * gcc_implicit_memset ( void *dest, int character, size_t len ) {
+ return memset ( dest, character, len );
+}
diff --git a/src/libgcc/memcpy.c b/src/libgcc/memcpy.c
deleted file mode 100644
index e98b7838..00000000
--- a/src/libgcc/memcpy.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/** @file
- *
- * gcc sometimes likes to insert implicit calls to memcpy().
- * Unfortunately, there doesn't seem to be any way to prevent it from
- * doing this, or to force it to use the optimised memcpy() as seen by
- * C code; it insists on inserting a symbol reference to "memcpy". We
- * therefore include wrapper functions just to keep gcc happy.
- *
- */
-
-#include <string.h>
-
-void * gcc_implicit_memcpy ( void *dest, const void *src,
- size_t len ) asm ( "memcpy" );
-
-void * gcc_implicit_memcpy ( void *dest, const void *src, size_t len ) {
- return memcpy ( dest, src, len );
-}