14e335edc8
ENDBR32 and RDSSPD are multi-byte NOPs on x86-64 processors and newer x86 processors, starting Pentium Pro. They are UD on older 32-bit processors. Detect this at configure time and adjust the default value for enable_cet. GCC will enable CET in 32-bit run-time libraries in any case if --enable-cet is used to configure GCC. PR target/84148 * config/cet.m4: Check if target support multi-byte NOPS (SSE). * libatomic/configure: Regenerate. * libbacktrace/configure: Likewise. * libgcc/configure: Likewise. * libgfortran/configure: Likewise. * libgomp/configure: Likewise. * libitm/configure: Likewise. * libmpx/configure: Likewise. * libobjc/configure: Likewise. * libquadmath/configure: Likewise. * libsanitizer/configure: Likewise. * libssp/configure: Likewise. * libstdc++-v3/configure: Likewise. * libvtv/configure: Likewise. From-SVN: r257809
51 lines
977 B
Plaintext
51 lines
977 B
Plaintext
dnl
|
|
dnl GCC_CET_FLAGS
|
|
dnl (SHELL-CODE_HANDLER)
|
|
dnl
|
|
AC_DEFUN([GCC_CET_FLAGS],[dnl
|
|
GCC_ENABLE(cet, default, ,[enable Intel CET in target libraries],
|
|
permit yes|no|default)
|
|
AC_MSG_CHECKING([for CET support])
|
|
|
|
case "$host" in
|
|
i[[34567]]86-*-linux* | x86_64-*-linux*)
|
|
case "$enable_cet" in
|
|
default)
|
|
# 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
|
|
;;
|
|
*)
|
|
enable_cet=no
|
|
;;
|
|
esac
|
|
if test x$enable_cet = xyes; then
|
|
$1="-fcf-protection -mcet"
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
])
|