From 87c66b2e70e421983a826518ff5e03d17eaa8f4c Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 29 Apr 2020 14:25:36 -0700 Subject: [PATCH] Sync config and libiberty with GCC config/ 2020-04-29 H.J. Lu Sync with GCC 2020-04-28 H.J. Lu PR bootstrap/94739 * cet.m4 (GCC_CET_HOST_FLAGS): Add -fcf-protection=none to -Wl,-z,ibt,-z,shstk. Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk works first. 2020-04-25 H.J. Lu PR bootstrap/94739 * cet.m4 (GCC_CET_HOST_FLAGS): New. 2020-04-22 Jakub Jelinek PR libfortran/94694 PR libfortran/94586 * math.m4 (GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1, GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2): New. libiberty/ 2020-04-28 H.J. Lu PR bootstrap/94739 * configure: Regenerated. --- config/ChangeLog | 22 ++++++++ config/cet.m4 | 105 ++++++++++++++++++++++++++++++++++++ config/math.m4 | 64 ++++++++++++++++++++++ libiberty/ChangeLog | 5 ++ libiberty/configure | 126 +++++++++++++++++++++++++++----------------- 5 files changed, 273 insertions(+), 49 deletions(-) diff --git a/config/ChangeLog b/config/ChangeLog index 959695d8f3..ece21f28fb 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,25 @@ +2020-04-29 H.J. Lu + + Sync with GCC + 2020-04-28 H.J. Lu + + PR bootstrap/94739 + * cet.m4 (GCC_CET_HOST_FLAGS): Add -fcf-protection=none to + -Wl,-z,ibt,-z,shstk. Check whether -fcf-protection=none + -Wl,-z,ibt,-z,shstk works first. + + 2020-04-25 H.J. Lu + + PR bootstrap/94739 + * cet.m4 (GCC_CET_HOST_FLAGS): New. + + 2020-04-22 Jakub Jelinek + + PR libfortran/94694 + PR libfortran/94586 + * math.m4 (GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1, + GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2): New. + 2020-02-19 Andrew Burgess * ax_count_cpus.m4: New file, backported from GCC. diff --git a/config/cet.m4 b/config/cet.m4 index b53c1bbd5c..ea616b728a 100644 --- a/config/cet.m4 +++ b/config/cet.m4 @@ -48,3 +48,108 @@ else AC_MSG_RESULT([no]) fi ]) + +dnl +dnl GCC_CET_HOST_FLAGS +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([GCC_CET_HOST_FLAGS],[dnl +GCC_ENABLE(cet, auto, ,[enable Intel CET in host libraries], + permit yes|no|auto) +AC_MSG_CHECKING([for CET support]) + +case "$host" in + i[[34567]]86-*-linux* | x86_64-*-linux*) + may_have_cet=yes + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fcf-protection" + case "$enable_cet" in + auto) + # Check if target supports multi-byte NOPs + # and if assembler supports CET insn. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [], + [ +#if !defined(__SSE2__) +#error target does not support multi-byte NOPs +#else +asm ("setssbsy"); +#endif + ])], + [enable_cet=yes], + [enable_cet=no]) + ;; + yes) + # Check if assembler supports CET. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [], + [asm ("setssbsy");])], + [], + [AC_MSG_ERROR([assembler with CET support is required for --enable-cet])]) + ;; + esac + CFLAGS="$save_CFLAGS" + ;; + *) + may_have_cet=no + enable_cet=no + ;; +esac + +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fcf-protection=none" +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk" +if test x$may_have_cet = xyes; then + # Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk work. + AC_TRY_LINK( + [],[return 0;], + [may_have_cet=yes], + [may_have_cet=no]) +fi + +if test x$may_have_cet = xyes; then + AC_TRY_RUN([ +static void +foo (void) +{ +} + +static void +__attribute__ ((noinline, noclone)) +xxx (void (*f) (void)) +{ + f (); +} + +static void +__attribute__ ((noinline, noclone)) +bar (void) +{ + xxx (foo); +} + +int +main () +{ + bar (); + return 0; +} + ], + [have_cet=no], + [have_cet=yes]) + if test x$enable_cet = xno -a x$have_cet = xyes; then + AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host]) + fi +fi +if test x$enable_cet = xyes; then + $1="-fcf-protection" + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi +CFLAGS="$save_CFLAGS" +LDFLAGS="$save_LDFLAGS" +]) diff --git a/config/math.m4 b/config/math.m4 index 155967e507..e1e88d075e 100644 --- a/config/math.m4 +++ b/config/math.m4 @@ -48,3 +48,67 @@ main () [Define to 1 if you have the `$1' function.]) fi ]) + +dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1([name], [type]) +dnl +dnl Check if math function NAME fallback for function with single +dnl TYPE argument and TYPE result can be implemented using +dnl __builtin_NAME expanded inline without needing unavailable math +dnl library function. +AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK1], +[ + AC_REQUIRE([GCC_CHECK_LIBM]) +if test $gcc_cv_math_func_$1 = no; then + AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], + [AC_LINK_IFELSE([AC_LANG_SOURCE([ +$2 +$1_fallback ($2 x) +{ + return __builtin_$1 (x); +} + +int +main () +{ + return 0; +} +])], +[gcc_cv_math_inline_builtin_$1=yes], +[gcc_cv_math_inline_builtin_$1=no])]) + if test $gcc_cv_math_inline_builtin_$1 = yes; then + AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], + [Define to 1 if `__builtin_$1' is expanded inline.]) + fi +fi]) + +dnl GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2([name], [type]) +dnl +dnl Check if math function NAME fallback for function with two +dnl TYPE arguments and TYPE result can be implemented using +dnl __builtin_NAME expanded inline without needing unavailable math +dnl library function. +AC_DEFUN([GCC_CHECK_MATH_INLINE_BUILTIN_FALLBACK2], +[ + AC_REQUIRE([GCC_CHECK_LIBM]) +if test $gcc_cv_math_func_$1 = no; then + AC_CACHE_CHECK([for inline __builtin_$1], [gcc_cv_math_inline_builtin_$1], + [AC_LINK_IFELSE([AC_LANG_SOURCE([ +$2 +$1_fallback ($2 x, $2 y) +{ + return __builtin_$1 (x, y); +} + +int +main () +{ + return 0; +} +])], +[gcc_cv_math_inline_builtin_$1=yes], +[gcc_cv_math_inline_builtin_$1=no])]) + if test $gcc_cv_math_inline_builtin_$1 = yes; then + AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_INLINE_BUILTIN_$1),[1], + [Define to 1 if `__builtin_$1' is expanded inline.]) + fi +fi]) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 3b61aaca93..a757715850 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,8 @@ +2020-04-28 H.J. Lu + + PR bootstrap/94739 + * configure: Regenerated. + 2020-04-27 Jakub Jelinek PR demangler/94797 diff --git a/libiberty/configure b/libiberty/configure index 2b52ce86c8..bb76cf1b82 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -1674,6 +1674,52 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + # ac_fn_c_check_header_preproc LINENO HEADER VAR # ---------------------------------------------- # Tests whether HEADER is present, setting the cache variable VAR accordingly. @@ -1940,52 +1986,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_type -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly @@ -5345,9 +5345,36 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fcf-protection=none" +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk" +if test x$may_have_cet = xyes; then + # Check whether -fcf-protection=none -Wl,-z,ibt,-z,shstk work. + if test x$gcc_no_link = xyes; then + as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +fi +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + may_have_cet=yes +else + may_have_cet=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + if test x$may_have_cet = xyes; then - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk" if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} @@ -5393,7 +5420,6 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi - LDFLAGS="$save_LDFLAGS" if test x$enable_cet = xno -a x$have_cet = xyes; then as_fn_error $? "Intel CET must be enabled on Intel CET enabled host" "$LINENO" 5 fi @@ -5406,6 +5432,8 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi +CFLAGS="$save_CFLAGS" +LDFLAGS="$save_LDFLAGS"