diff options
| -rwxr-xr-x | configure | 42 | 
1 files changed, 37 insertions, 5 deletions
@@ -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 <<EOF  $($CC -dumpspecs)  EOF -echo $wrapper  else -echo no +wrapper=no  fi +echo "$wrapper"  fi @@ -484,6 +495,27 @@ printf "no\n"  fail "$0: error: unsupported long double type"  fi +# +# Check for known bug in GCC 4.9.0 that results in a broken libc. +# +if test "$cc_is_gcc" = yes ; then +printf "checking for gcc constant folding bug with weak aliases... " +echo 'static int x = 0;' > "$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")  | 
