104 lines
2.6 KiB
Diff
104 lines
2.6 KiB
Diff
|
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.
|
||
|
|
||
|
From 847e4b3207f97762dc641db8d3b188081c3370c3 Mon Sep 17 00:00:00 2001
|
||
|
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||
|
Date: Fri, 12 Feb 2021 16:30:23 -0800
|
||
|
Subject: [PATCH] GCC_CET_HOST_FLAGS: Check if host supports multi-byte NOPs
|
||
|
|
||
|
---
|
||
|
config/cet.m4 | 19 ++++++++++++++++---
|
||
|
libiberty/configure | 29 +++++++++++++++++++++++++++++
|
||
|
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 160b8c9e8b1..29a690d44fc 100755
|
||
|
--- a/libiberty/configure
|
||
|
+++ b/libiberty/configure
|
||
|
@@ -5539,6 +5539,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)
|
||
|
{
|
||
|
@@ -5575,6 +5603,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
|
||
|
--
|
||
|
2.29.2
|
||
|
|