aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2021-02-12 16:30:23 -0800
committerAndreas K. Hüttel <dilfridge@gentoo.org>2021-04-20 17:45:13 +0200
commit7cb2fdba3fcf91cb7cc1b34829ec980281f6b2aa (patch)
treea3f1278657f0418f04c7b4d2d8e0f403a33843ef
parentAutomatic date update in version.in (diff)
downloadbinutils-gdb-7cb2fdba3fcf91cb7cc1b34829ec980281f6b2aa.tar.gz
binutils-gdb-7cb2fdba3fcf91cb7cc1b34829ec980281f6b2aa.tar.bz2
binutils-gdb-7cb2fdba3fcf91cb7cc1b34829ec980281f6b2aa.zip
GCC_CET_HOST_FLAGS: Check if host supports multi-byte NOPsgentoo/binutils-2.36.1-3
https://bugs.gentoo.org/771765 https://sourceware.org/PR27397 On i586-like CPUs endbr32 added by -Wl,-z,ibt,-z,shstk generates crashing binaries and causes ./configure failure.
-rw-r--r--config/cet.m419
-rwxr-xr-xlibiberty/configure29
2 files changed, 45 insertions, 3 deletions
diff --git a/config/cet.m4 b/config/cet.m4
index c67fb4f35b6..7718be1afe8 100644
--- a/config/cet.m4
+++ b/config/cet.m4
@@ -130,6 +130,18 @@ fi
if test x$may_have_cet = xyes; then
if test x$cross_compiling = xno; then
AC_TRY_RUN([
+int
+main ()
+{
+ asm ("endbr32");
+ return 0;
+}
+ ],
+ [have_multi_byte_nop=yes],
+ [have_multi_byte_nop=no])
+ have_cet=no
+ if test x$have_multi_byte_nop = xyes; then
+ AC_TRY_RUN([
static void
foo (void)
{
@@ -155,9 +167,10 @@ main ()
bar ();
return 0;
}
- ],
- [have_cet=no],
- [have_cet=yes])
+ ],
+ [have_cet=no],
+ [have_cet=yes])
+ fi
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
diff --git a/libiberty/configure b/libiberty/configure
index b6af9baf212..a8cf88e5c2b 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -5399,6 +5399,34 @@ else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+int
+main ()
+{
+ asm ("endbr32");
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ have_multi_byte_nop=yes
+else
+ have_multi_byte_nop=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ have_cet=no
+ if test x$have_multi_byte_nop = xyes; then
+ 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;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
static void
foo (void)
{
@@ -5435,6 +5463,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
+ fi
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