diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | NEWS | 10 | ||||
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | aclocal.m4 | 33 | ||||
-rwxr-xr-x | configure | 9 | ||||
-rw-r--r-- | configure.in | 9 | ||||
-rw-r--r-- | sysdeps/i386/configure | 39 | ||||
-rw-r--r-- | sysdeps/i386/configure.in | 19 |
8 files changed, 126 insertions, 6 deletions
@@ -1,5 +1,16 @@ 2013-04-06 Carlos O'Donell <carlos@redhat.com> + [BZ #10060, #10062] + * aclocal.m4 (LIBC_COMPILER_BUILTIN_INLINED): New macro. + * sysdeps/i386/configure.in: Use LIBC_COMPILER_BUILTIN_INLINED and + fail configure if __sync_val_compare_and_swap is not inlined. + * sysdeps/i386/configure: Regenerate. + * configure.in: Build for i686 when configured for i386. + * configure: Regenerate. + * README: Remove i386 reference. + +2013-04-06 Carlos O'Donell <carlos@redhat.com> + * sysdeps/s390/s390-32/sysdep.h: Undefine PSEUDO before redefinition. * sysdeps/s390/s390-64/sysdep.h: Likewise. @@ -9,11 +9,11 @@ Version 2.18 * The following bugs are resolved with this release: - 10357, 11120, 11561, 12723, 13550, 13889, 13951, 14142, 14176, 14200, - 14317, 14327, 14478, 14496, 14686, 14812, 14920, 14964, 14981, 14982, - 14985, 14994, 14996, 15003, 15006, 15020, 15023, 15036, 15054, 15055, - 15062, 15078, 15160, 15214, 15232, 15234, 15283, 15285, 15287, 15304, - 15305, 15307, 15327, 15330, 15335, 15336, 15337, 15342. + 10060, 10062, 10357, 11120, 11561, 12723, 13550, 13889, 13951, 14142, + 14176, 14200, 14317, 14327, 14478, 14496, 14686, 14812, 14920, 14964, + 14981, 14982, 14985, 14994, 14996, 15003, 15006, 15020, 15023, 15036, + 15054, 15055, 15062, 15078, 15160, 15214, 15232, 15234, 15283, 15285, + 15287, 15304, 15305, 15307, 15327, 15330, 15335, 15336, 15337, 15342. * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla #15078). @@ -12,7 +12,7 @@ implement the operating system behavior seen by user applications. In GNU/Hurd systems, it works with a microkernel and Hurd servers. The GNU C Library implements much of the POSIX.1 functionality in the -GNU/Hurd system, using configurations i[34567]86-*-gnu. The current +GNU/Hurd system, using configurations i[4567]86-*-gnu. The current GNU/Hurd support requires out-of-tree patches that will eventually be incorporated into an official GNU C Library release. @@ -248,3 +248,36 @@ dnl LIBC_CONFIG_VAR(make-variable, shell-value) AC_DEFUN([LIBC_CONFIG_VAR], [config_vars="$config_vars $1 = $2"]) + +dnl Check that function FUNC was inlined as a builtin. The code fragment +dnl CODE is compiled with additional options CC_OPTION. If FUNC is +dnl not found in the assembly then it is assumed the compiler has support +dnl for this builtin and has inlined the call. If the compiler has the +dnl feature then ACTION-IF-TRUE is called, otherwise ACTION-IF-FALSE. +dnl It is up to the caller to provide a CC_OPTION that ensures the +dnl builtin is inlined if present. +dnl Warning: This may not work for some machines. For example on ARM the +dnl ABI dictates that some functions should not be inlined and instead +dnl should be provided by a compiler helper library e.g. __aeabi_memcpy. +dnl This is done to reduce code size. +dnl LIBC_COMPILER_BUILTIN([func], [code], [cc_option], [action-if-true], [action-if-false]) +AC_DEFUN([LIBC_COMPILER_BUILTIN_INLINED], +[AC_MSG_CHECKING([for compiler support of inlined builtin function $1]) +libc_compiler_builtin_inlined=no +cat > conftest.c <<EOF +int _start (void) { $2 return 0; } +EOF +if ! AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS + $3 -nostdlib -nostartfiles + -S conftest.c -o - | fgrep "$1" + 1>&AS_MESSAGE_LOG_FD]) +then + libc_compiler_builtin_inlined=yes +fi +rm -f conftest* +if test $libc_compiler_builtin_inlined = yes; then + $4 +else + $5 +fi +AC_MSG_RESULT($libc_compiler_builtin_inlined)]) @@ -3741,6 +3741,15 @@ case "$machine-$host_os" in ;; esac +# Configure for i686 if the user asks for i386. We don't support +# i386 any more but it continues to be common for users to configure +# 32-bit x86 as i386. We build for i686 instead. +if test "$machine" = i386; then + machine="i686" + echo "\ +*** WARNING: Support for i386 is deprecated. Building for i686 instead." +fi + submachine= # Check whether --with-cpu was given. diff --git a/configure.in b/configure.in index bbdf156..d93ca5c 100644 --- a/configure.in +++ b/configure.in @@ -390,6 +390,15 @@ case "$machine-$host_os" in ;; esac +# Configure for i686 if the user asks for i386. We don't support +# i386 any more but it continues to be common for users to configure +# 32-bit x86 as i386. We build for i686 instead. +if test "$machine" = i386; then + machine="i686" + echo "\ +*** WARNING: Support for i386 is deprecated. Building for i686 instead." +fi + submachine= AC_ARG_WITH([cpu], AS_HELP_STRING([--with-cpu=CPU], [select code for CPU variant]), diff --git a/sysdeps/i386/configure b/sysdeps/i386/configure index d81b613a..a1a0fe7 100644 --- a/sysdeps/i386/configure +++ b/sysdeps/i386/configure @@ -32,6 +32,45 @@ $as_echo "$ac_res" >&6; } # This file is generated from configure.in by Autoconf. DO NOT EDIT! # Local configure fragment for sysdeps/i386. +# The GNU C Library can't be built for i386. There are several reasons for +# this restriction. The primary reason is that i386 lacks the atomic +# operations required to support the current NPTL implementation. While it is +# possible that such atomic operations could be emulated in the kernel to date +# no such work has been done to enable this. Even with NPTL disabled you still +# have no atomic.h implementation. Given the declining use of i386 we disable +# support for building with `-march=i386' or `-mcpu=i386.' We don't explicitly +# check for i386, instead we make sure the compiler has support for inlining +# the builtin __sync_val_compare_and_swap. If it does then we should have no +# problem building for i386. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler support of inlined builtin function __sync_val_compare_and_swap" >&5 +$as_echo_n "checking for compiler support of inlined builtin function __sync_val_compare_and_swap... " >&6; } +libc_compiler_builtin_inlined=no +cat > conftest.c <<EOF +int _start (void) { int a, b, c; __sync_val_compare_and_swap (&a, b, c); return 0; } +EOF +if ! { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS + -O0 -nostdlib -nostartfiles + -S conftest.c -o - | fgrep "__sync_val_compare_and_swap" + 1>&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + libc_compiler_builtin_inlined=yes +fi +rm -f conftest* +if test $libc_compiler_builtin_inlined = yes; then + libc_cv_unsupported_i386=no +else + as_fn_error $? " +*** Building with -march=i386/-mcpu=i386 is not supported. +*** Please use host i786, i686, i586, or i486." "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_compiler_builtin_inlined" >&5 +$as_echo "$libc_compiler_builtin_inlined" >&6; } + ac_fn_c_check_header_compile "$LINENO" "cpuid.h" "ac_cv_header_cpuid_h" "/* No default includes. */ " diff --git a/sysdeps/i386/configure.in b/sysdeps/i386/configure.in index 9967a16..56a7c1f 100644 --- a/sysdeps/i386/configure.in +++ b/sysdeps/i386/configure.in @@ -1,6 +1,25 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. # Local configure fragment for sysdeps/i386. +# The GNU C Library can't be built for i386. There are several reasons for +# this restriction. The primary reason is that i386 lacks the atomic +# operations required to support the current NPTL implementation. While it is +# possible that such atomic operations could be emulated in the kernel to date +# no such work has been done to enable this. Even with NPTL disabled you still +# have no atomic.h implementation. Given the declining use of i386 we disable +# support for building with `-march=i386' or `-mcpu=i386.' We don't explicitly +# check for i386, instead we make sure the compiler has support for inlining +# the builtin __sync_val_compare_and_swap. If it does then we should have no +# problem building for i386. +LIBC_COMPILER_BUILTIN_INLINED( + [__sync_val_compare_and_swap], + [int a, b, c; __sync_val_compare_and_swap (&a, b, c);], + [-O0], + [libc_cv_unsupported_i386=no], + [AC_MSG_ERROR([ +*** Building with -march=i386/-mcpu=i386 is not supported. +*** Please use host i786, i686, i586, or i486.])]) + AC_CHECK_HEADER([cpuid.h], , [AC_MSG_ERROR([gcc must provide the <cpuid.h> header])], [/* No default includes. */]) |