work around gcc 4.8's generation of self-referential mem* functions at -O3
authorRich Felker <dalias@aerifal.cx>
Thu, 1 Aug 2013 21:12:23 +0000 (17:12 -0400)
committerRich Felker <dalias@aerifal.cx>
Thu, 1 Aug 2013 21:12:23 +0000 (17:12 -0400)
Makefile
configure

index 96910bd20886142f373d81933b0b98bb2af3a15e..00aa7069bfaf914ee9530bedc9590031891bdb96 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -87,6 +87,9 @@ crt/Scrt1.o: CFLAGS += -fPIC
 OPTIMIZE_SRCS = $(wildcard $(OPTIMIZE_GLOBS:%=src/%))
 $(OPTIMIZE_SRCS:%.c=%.o) $(OPTIMIZE_SRCS:%.c=%.lo): CFLAGS += -O3
 
+MEMOPS_SRCS = src/string/memcpy.c src/string/memmove.c src/string/memcmp.c src/string/memset.c
+$(MEMOPS_SRCS:%.c=%.o) $(MEMOPS_SRCS:%.c=%.lo): CFLAGS += $(CFLAGS_MEMOPS)
+
 %.o: $(ARCH)/%.s
        $(CC) $(CFLAGS_ALL_STATIC) -c -o $@ $<
 
index 87207b62abd6370a577c572dfeed24213b5ff78e..1d734726a4b8abb1d55e653ec44eb6cf1c5e2878 100755 (executable)
--- a/configure
+++ b/configure
@@ -104,6 +104,7 @@ fi
 
 CFLAGS_C99FSE=
 CFLAGS_AUTO=
+CFLAGS_MEMOPS=
 LDFLAGS_AUTO=
 OPTIMIZE_GLOBS=
 prefix=/usr/local/musl
@@ -236,6 +237,14 @@ tryflag CFLAGS_C99FSE -fexcess-precision=standard \
 || { test "$ARCH" = i386 && tryflag CFLAGS_C99FSE -ffloat-store ; }
 tryflag CFLAGS_C99FSE -frounding-math
 
+#
+# Check for options that may be needed to prevent the compiler from
+# generating self-referential versions of memcpy,, memmove, memcmp,
+# and memset. Really, we should add a check to determine if this
+# option is sufficient, and if not, add a macro to cripple these
+# functions with volatile...
+#
+tryflag CFLAGS_MEMOPS -fno-tree-loop-distribute-patterns
 
 #
 # If debugging is explicitly enabled, don't auto-enable optimizations
@@ -403,6 +412,7 @@ syslibdir = $syslibdir
 CC = $CC
 CFLAGS= $CFLAGS_AUTO $CFLAGS
 CFLAGS_C99FSE = $CFLAGS_C99FSE
+CFLAGS_MEMOPS = $CFLAGS_MEMOPS
 CPPFLAGS = $CPPFLAGS
 LDFLAGS = $LDFLAGS_AUTO $LDFLAGS
 CROSS_COMPILE = $CROSS_COMPILE