mirror of
git://git.musl-libc.org/musl
synced 2024-12-15 19:25:55 +00:00
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.
This commit is contained in:
parent
8a2d871987
commit
9ca4dae5d8
42
configure
vendored
42
configure
vendored
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user