diff mbox series

Check whether -fcf-protection=none -Wl, -z, ibt, -z, shstk work first

Message ID 20200427170526.4561-1-hjl.tools@gmail.com
State New
Headers show
Series Check whether -fcf-protection=none -Wl, -z, ibt, -z, shstk work first | expand

Commit Message

H.J. Lu April 27, 2020, 5:05 p.m. UTC
GCC_CET_HOST_FLAGS uses -Wl,-z,ibt,-z,shstk to check if Linux/x86 host
has Intel CET enabled by introducing an Intel CET violation on purpose.
To avoid false positive, check whether -Wl,-z,ibt,-z,shstk works first.
-fcf-protection=none is added to avoid false negative when -fcf-protection
is enabled by default.

OK for master?

H.J.
---
config/

	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.

libiberty/

	PR bootstrap/94739
	* configure: Regenerated.

lto-plugin/

	PR bootstrap/94739
	* configure: Regenerated.
---
 config/cet.m4        |  17 ++++--
 libiberty/configure  | 126 ++++++++++++++++++++++++++-----------------
 lto-plugin/configure |  35 ++++++++++--
 3 files changed, 121 insertions(+), 57 deletions(-)

Comments

Richard Biener April 28, 2020, 6:42 a.m. UTC | #1
On Mon, Apr 27, 2020 at 8:13 PM H.J. Lu via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> GCC_CET_HOST_FLAGS uses -Wl,-z,ibt,-z,shstk to check if Linux/x86 host
> has Intel CET enabled by introducing an Intel CET violation on purpose.
> To avoid false positive, check whether -Wl,-z,ibt,-z,shstk works first.
> -fcf-protection=none is added to avoid false negative when -fcf-protection
> is enabled by default.
>
> OK for master?

OK.

> H.J.
> ---
> config/
>
>         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.
>
> libiberty/
>
>         PR bootstrap/94739
>         * configure: Regenerated.
>
> lto-plugin/
>
>         PR bootstrap/94739
>         * configure: Regenerated.
> ---
>  config/cet.m4        |  17 ++++--
>  libiberty/configure  | 126 ++++++++++++++++++++++++++-----------------
>  lto-plugin/configure |  35 ++++++++++--
>  3 files changed, 121 insertions(+), 57 deletions(-)
>
> diff --git a/config/cet.m4 b/config/cet.m4
> index 8b9e01fd492..ea616b728a9 100644
> --- a/config/cet.m4
> +++ b/config/cet.m4
> @@ -98,9 +98,19 @@ asm ("setssbsy");
>      ;;
>  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
> -  save_LDFLAGS="$LDFLAGS"
> -  LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk"
>    AC_TRY_RUN([
>  static void
>  foo (void)
> @@ -130,7 +140,6 @@ main ()
>    ],
>    [have_cet=no],
>    [have_cet=yes])
> -  LDFLAGS="$save_LDFLAGS"
>    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
> @@ -141,4 +150,6 @@ if test x$enable_cet = xyes; then
>  else
>    AC_MSG_RESULT([no])
>  fi
> +CFLAGS="$save_CFLAGS"
> +LDFLAGS="$save_LDFLAGS"
>  ])
> diff --git a/libiberty/configure b/libiberty/configure
> index 2b52ce86c89..bb76cf1b823 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"
>
>
>
> diff --git a/lto-plugin/configure b/lto-plugin/configure
> index e55b35ecf38..1baf6cc70b8 100755
> --- a/lto-plugin/configure
> +++ b/lto-plugin/configure
> @@ -5741,9 +5741,33 @@ 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.
> +  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;}
> @@ -5789,7 +5813,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
> @@ -5802,6 +5825,8 @@ else
>    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
>  $as_echo "no" >&6; }
>  fi
> +CFLAGS="$save_CFLAGS"
> +LDFLAGS="$save_LDFLAGS"
>
>
>
> @@ -11916,7 +11941,7 @@ else
>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>    lt_status=$lt_dlunknown
>    cat > conftest.$ac_ext <<_LT_EOF
> -#line 11919 "configure"
> +#line 11944 "configure"
>  #include "confdefs.h"
>
>  #if HAVE_DLFCN_H
> @@ -12022,7 +12047,7 @@ else
>    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
>    lt_status=$lt_dlunknown
>    cat > conftest.$ac_ext <<_LT_EOF
> -#line 12025 "configure"
> +#line 12050 "configure"
>  #include "confdefs.h"
>
>  #if HAVE_DLFCN_H
> --
> 2.25.4
>
diff mbox series

Patch

diff --git a/config/cet.m4 b/config/cet.m4
index 8b9e01fd492..ea616b728a9 100644
--- a/config/cet.m4
+++ b/config/cet.m4
@@ -98,9 +98,19 @@  asm ("setssbsy");
     ;;
 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
-  save_LDFLAGS="$LDFLAGS"
-  LDFLAGS="$LDFLAGS -Wl,-z,ibt,-z,shstk"
   AC_TRY_RUN([
 static void
 foo (void)
@@ -130,7 +140,6 @@  main ()
   ],
   [have_cet=no],
   [have_cet=yes])
-  LDFLAGS="$save_LDFLAGS"
   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
@@ -141,4 +150,6 @@  if test x$enable_cet = xyes; then
 else
   AC_MSG_RESULT([no])
 fi
+CFLAGS="$save_CFLAGS"
+LDFLAGS="$save_LDFLAGS"
 ])
diff --git a/libiberty/configure b/libiberty/configure
index 2b52ce86c89..bb76cf1b823 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"
 
 
 
diff --git a/lto-plugin/configure b/lto-plugin/configure
index e55b35ecf38..1baf6cc70b8 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -5741,9 +5741,33 @@  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.
+  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;}
@@ -5789,7 +5813,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
@@ -5802,6 +5825,8 @@  else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
+CFLAGS="$save_CFLAGS"
+LDFLAGS="$save_LDFLAGS"
 
 
 
@@ -11916,7 +11941,7 @@  else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11919 "configure"
+#line 11944 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12022,7 +12047,7 @@  else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12025 "configure"
+#line 12050 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H