From e0a0574f6777da8bbcc9a76d4db5c6978b2c27a3 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 19 May 2014 10:33:28 -0400 Subject: add configure check for broken gcc 4.9.0 and possibly other versions this is gcc bug #61144. the broken compiler is detected, but the user must manually work around it. this is partly to avoid complex logic for adding workaround CFLAGS and attempting to recheck with them, and partly for the sake of letting the user know the compiler is broken (since the workaround will result in less-efficient code production). some refactoring was also needed to move the check for gcc outside of the check for whether to build the compiler wrapper. (cherry picked from commit 9ca4dae5d895cf816eb1815511aba77a90f6acd7) --- configure | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) (limited to 'configure') diff --git a/configure b/configure index 5d956723..30f409fd 100755 --- a/configure +++ b/configure @@ -125,6 +125,7 @@ debug=no warnings=no shared=yes static=yes +wrapper=auto for arg ; do case "$arg" in @@ -199,23 +200,33 @@ exit 1 fi # -# Only build musl-gcc wrapper if toolchain does not already target musl +# Need to know if the compiler is gcc to decide whether to build the +# musl-gcc wrapper, and for critical bug detection in some gcc versions. # -if test -z "$wrapper" ; then printf "checking whether compiler is gcc... " if fnmatch '*gcc\ version*' "$($CC -v 2>&1)" ; then -echo yes +cc_is_gcc=yes +else +cc_is_gcc=no +fi +echo "$cc_is_gcc" + +# +# Only build musl-gcc wrapper if toolchain does not already target musl +# +if test "$wrapper" = auto ; then printf "checking whether to build musl-gcc wrapper... " +if test "$cc_is_gcc" = yes ; then wrapper=yes while read line ; do case "$line" in */ld-musl-*) wrapper=no ;; esac done < "$tmpc" +echo 'extern int y __attribute__((__weak__, __alias__("x")));' >> "$tmpc" +echo 'extern int should_appear;' >> "$tmpc" +echo 'int foo() { return y ? should_appear : 0; }' >> "$tmpc" +case "$($CC $CFLAGS_C99FSE -I./arch/$ARCH -I./include \ + $CPPFLAGS $CFLAGS_AUTO $CFLAGS -S -o - "$tmpc" 2>/dev/null)" in +*should_appear*) +printf "no\n" +;; +*) +printf "yes\n" +fail "$0: error: broken compiler; try CFLAGS=-fno-toplevel-reorder" +;; +esac +fi + printf "creating config.mak... " cmdline=$(quote "$0") -- cgit v1.2.1