From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 54221 invoked by alias); 15 Oct 2019 19:04:26 -0000 Mailing-List: contact glibc-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: , Sender: glibc-cvs-owner@sourceware.org List-Subscribe: Received: (qmail 54202 invoked by uid 10126); 15 Oct 2019 19:04:26 -0000 Date: Tue, 15 Oct 2019 19:04:00 -0000 Message-ID: <20191015190426.54201.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Gabriel F.T.Gomes To: glibc-cvs@sourceware.org Subject: [glibc/gabriel/powerpc-ieee128-printscan] powerpc64le: Require a compiler with -mno-gnu-attribute X-Act-Checkin: glibc X-Git-Author: Gabriel F. T. Gomes X-Git-Refname: refs/heads/gabriel/powerpc-ieee128-printscan X-Git-Oldrev: 1383090d1047e6d4c108e8478e94511307de77cd X-Git-Newrev: b843c8d832cdb2a1000b45e853c17211de67b4e7 X-SW-Source: 2019-q4/txt/msg00068.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b843c8d832cdb2a1000b45e853c17211de67b4e7 commit b843c8d832cdb2a1000b45e853c17211de67b4e7 Author: Gabriel F. T. Gomes Date: Fri Oct 11 15:20:05 2019 -0300 powerpc64le: Require a compiler with -mno-gnu-attribute On powerpc64le, a few files are built on IEEE long double mode (-mabi=ieeelongdouble), whereas most are built on IBM long double mode (-mabi=ibmlongdouble, the default for -mlong-double-128). Since binutils 2.31, linking object files with different long double modes causes errors similar to: ld: libc_pic.a(s_isinfl.os) uses IBM long double, libc_pic.a(ieee128-qefgcvt.os) uses IEEE long double. collect2: error: ld returned 1 exit status make[2]: *** [../Makerules:649: libc_pic.os] Error 1 The warnings are fair and correct, but in order for glibc to have support for both long double modes on powerpc64le, they have to be ignored. This can be accomplished with the use of -mno-gnu-attribute option when building the few files that require IEEE long double mode. However, -mno-gnu-attribute is not available in GCC 6, the minimum version required to build glibc, so this patch adds a test for this feature in powerpc64le builds, and fails early if it's not available. Tested, on powerpc64le, that the build fails early with GCC 6 and that it succeeds with GCC 7 or greater. Diff: --- sysdeps/powerpc/powerpc64/le/configure | 29 +++++++++++++++++++++++++++++ sysdeps/powerpc/powerpc64/le/configure.ac | 15 +++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/sysdeps/powerpc/powerpc64/le/configure b/sysdeps/powerpc/powerpc64/le/configure index bca80ce..c8e01af 100644 --- a/sysdeps/powerpc/powerpc64/le/configure +++ b/sysdeps/powerpc/powerpc64/le/configure @@ -32,4 +32,33 @@ if test "$libc_cv_target_power8_ok" != "yes"; then : fi CFLAGS="$OLD_CFLAGS" +# Local configure fragment for sysdeps/powerpc/powerpc64le. + +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -mno-gnu-attribute" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler supports -mno-gnu-attribute" >&5 +$as_echo_n "checking if the compiler supports -mno-gnu-attribute... " >&6; } +if ${libc_cv_no_gnu_attr_ok+:} false; then : + $as_echo_n "(cached) " >&6 +else + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libc_cv_no_gnu_attr_ok=yes +else + libc_cv_no_gnu_attr_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_no_gnu_attr_ok" >&5 +$as_echo "$libc_cv_no_gnu_attr_ok" >&6; } +if test "$libc_cv_no_gnu_attr_ok" != "yes"; then : + critic_missing="$critic_missing A compiler with -mno-gnu-attribute is required on powerpc64le." +fi +CFLAGS="$OLD_CFLAGS" + test -n "$critic_missing" && as_fn_error $? "*** $critic_missing" "$LINENO" 5 diff --git a/sysdeps/powerpc/powerpc64/le/configure.ac b/sysdeps/powerpc/powerpc64/le/configure.ac index 7f2c9fb..fdec696 100644 --- a/sysdeps/powerpc/powerpc64/le/configure.ac +++ b/sysdeps/powerpc/powerpc64/le/configure.ac @@ -17,4 +17,19 @@ AS_IF([test "$libc_cv_target_power8_ok" != "yes"], [critic_missing="$critic_missing POWER8 or newer is required on powerpc64le."]) CFLAGS="$OLD_CFLAGS" +# Local configure fragment for sysdeps/powerpc/powerpc64le. + +dnl Require support for -mno-gnu-attribute +OLD_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -mno-gnu-attribute" +AC_CACHE_CHECK([if the compiler supports -mno-gnu-attribute], + libc_cv_no_gnu_attr_ok, [ +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +]])], + [libc_cv_no_gnu_attr_ok=yes], + [libc_cv_no_gnu_attr_ok=no])]) +AS_IF([test "$libc_cv_no_gnu_attr_ok" != "yes"], + [critic_missing="$critic_missing A compiler with -mno-gnu-attribute is required on powerpc64le."]) +CFLAGS="$OLD_CFLAGS" + test -n "$critic_missing" && AC_MSG_ERROR([*** $critic_missing])