public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc] s390x: Require GCC 7.1 or later to build glibc.
@ 2020-12-17 15:18 Stefan Liebler
  0 siblings, 0 replies; only message in thread
From: Stefan Liebler @ 2020-12-17 15:18 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=844b4d8b4b937fe6943d2c0c80ce7d871cdb1eb5

commit 844b4d8b4b937fe6943d2c0c80ce7d871cdb1eb5
Author: Stefan Liebler <stli@linux.ibm.com>
Date:   Tue Dec 15 15:18:03 2020 +0100

    s390x: Require GCC 7.1 or later to build glibc.
    
    GCC 6.5 fails to correctly build ldconfig with recent ld.so.cache
    commits, e.g.:
    785969a047ad2f23f758901c6816422573544453
    elf: Implement a string table for ldconfig, with tail merging
    
    If glibc is build with gcc 6.5.0:
    __builtin_add_overflow is used in
    <glibc>/elf/stringtable.c:stringtable_finalize()
    which leads to ldconfig failing with "String table is too large".
    This is also recognizable in following tests:
    FAIL: elf/tst-glibc-hwcaps-cache
    FAIL: elf/tst-glibc-hwcaps-prepend-cache
    FAIL: elf/tst-ldconfig-X
    FAIL: elf/tst-ldconfig-bad-aux-cache
    FAIL: elf/tst-ldconfig-ld_so_conf-update
    FAIL: elf/tst-stringtable
    
    See gcc "Bug 98269 - gcc 6.5.0 __builtin_add_overflow() with small
    uint32_t values incorrectly detects overflow"
    (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269)

Diff:
---
 INSTALL                   |  3 +++
 NEWS                      |  2 ++
 manual/install.texi       |  2 ++
 sysdeps/s390/configure    | 35 +++++++++++++++++++++++++++++++++++
 sysdeps/s390/configure.ac | 17 +++++++++++++++++
 5 files changed, 59 insertions(+)

diff --git a/INSTALL b/INSTALL
index 2b00f80df5..accdc39821 100644
--- a/INSTALL
+++ b/INSTALL
@@ -467,6 +467,9 @@ build the GNU C Library:
 
      For ARC architecture builds, GCC 8.3 or higher is needed.
 
+     For s390x architecture builds, GCC 7.1 or higher is needed (See gcc
+     Bug 98269).
+
      For multi-arch support it is recommended to use a GCC which has
      been built with support for GNU indirect functions.  This ensures
      that correct debugging information is generated for functions
diff --git a/NEWS b/NEWS
index 0820984547..86e05fb023 100644
--- a/NEWS
+++ b/NEWS
@@ -67,6 +67,8 @@ Changes to build and runtime requirements:
   (and pseudo-terminals are supported), a devpts file system is mounted
   on /dev/pts.  Current systems already meet these requirements.
 
+* s390x requires GCC 7.1 or newer.  See gcc Bug 98269.
+
 Security related changes:
 
   CVE-2020-27618: An infinite loop has been fixed in the iconv program when
diff --git a/manual/install.texi b/manual/install.texi
index 2e164476d5..648f366371 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -509,6 +509,8 @@ Library with support for IEEE long double.
 
 For ARC architecture builds, GCC 8.3 or higher is needed.
 
+For s390x architecture builds, GCC 7.1 or higher is needed (See gcc Bug 98269).
+
 For multi-arch support it is recommended to use a GCC which has been built with
 support for GNU indirect functions.  This ensures that correct debugging
 information is generated for functions selected by IFUNC resolvers.  This
diff --git a/sysdeps/s390/configure b/sysdeps/s390/configure
index fa46e9e351..5f98640d0f 100644
--- a/sysdeps/s390/configure
+++ b/sysdeps/s390/configure
@@ -296,5 +296,40 @@ then
 
 fi
 
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC is sufficient to build libc on s390x" >&5
+$as_echo_n "checking if $CC is sufficient to build libc on s390x... " >&6; }
+if ${libc_cv_compiler_ok_on_s390x+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+#if !defined __GNUC__ || __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 1)
+#error insufficient compiler for building on s390x
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  libc_cv_compiler_ok_on_s390x=yes
+else
+  libc_cv_compiler_ok_on_s390x=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_compiler_ok_on_s390x" >&5
+$as_echo "$libc_cv_compiler_ok_on_s390x" >&6; }
+if test "$libc_cv_compiler_ok_on_s390x" != yes; then
+   critic_missing="$critic_missing On s390x, GCC >= 7.1.0 is required."
+fi
+
 test -n "$critic_missing" && as_fn_error $? "
 *** $critic_missing" "$LINENO" 5
diff --git a/sysdeps/s390/configure.ac b/sysdeps/s390/configure.ac
index 3ed5a8ef87..dfe007a774 100644
--- a/sysdeps/s390/configure.ac
+++ b/sysdeps/s390/configure.ac
@@ -212,5 +212,22 @@ then
   AC_DEFINE(HAVE_S390_MIN_ARCH13_ZARCH_ASM_SUPPORT)
 fi
 
+dnl test if GCC is new enough. See gcc "Bug 98269 - gcc 6.5.0
+dnl __builtin_add_overflow() with small uint32_t values incorrectly detects
+dnl overflow
+dnl (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269)
+AC_CACHE_CHECK([if $CC is sufficient to build libc on s390x],
+libc_cv_compiler_ok_on_s390x, [
+AC_TRY_COMPILE([], [
+#if !defined __GNUC__ || __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 1)
+#error insufficient compiler for building on s390x
+#endif
+],
+	[libc_cv_compiler_ok_on_s390x=yes],
+	[libc_cv_compiler_ok_on_s390x=no])])
+if test "$libc_cv_compiler_ok_on_s390x" != yes; then
+   critic_missing="$critic_missing On s390x, GCC >= 7.1.0 is required."
+fi
+
 test -n "$critic_missing" && AC_MSG_ERROR([
 *** $critic_missing])


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-12-17 15:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-17 15:18 [glibc] s390x: Require GCC 7.1 or later to build glibc Stefan Liebler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).