summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorIgor Tsimbalist <igor.v.tsimbalist@intel.com>2017-11-17 14:34:39 +0100
committerIgor Tsimbalist <itsimbal@gcc.gnu.org>2017-11-17 14:34:39 +0100
commit1ecae1fc238a6b02b3cc2de6a24d73966bc45a03 (patch)
treedaa0015bf7667568564bbd9abcd7fbe77ef2942f /config
parenta851ce04f7050dd82aa8344e7b68ee8319fb7b6f (diff)
downloadgcc-1ecae1fc238a6b02b3cc2de6a24d73966bc45a03.tar.gz
Enable building libgcc with CET options.
Enable building libgcc with CET options by default on Linux/x86 if binutils supports CET v2.0. It can be disabled with --disable-cet. It is an error to configure GCC with --enable-cet if bintuiils doesn't support CET v2.0. ENDBR instruction is added to __morestack_large_model since it is called indirectly. 2017-11-17 Igor Tsimbalist <igor.v.tsimbalist@intel.com> config/ * cet.m4: New file. gcc/ * config.gcc (extra_headers): Add cet.h for x86 targets. * config/i386/cet.h: New file. * doc/install.texi: Add --enable-cet/--disable-cet. libgcc/ * Makefile.in (configure_deps): Add $(srcdir)/../config/cet.m4. (CET_FLAGS): New. * config/i386/morestack.S: Include <cet.h>. (__morestack_large_model): Add _CET_ENDBR at function entrance. * config/i386/resms64.h: Include <cet.h>. * config/i386/resms64f.h: Likewise. * config/i386/resms64fx.h: Likewise. * config/i386/resms64x.h: Likewise. * config/i386/savms64.h: Likewise. * config/i386/savms64f.h: Likewise. * config/i386/t-linux (HOST_LIBGCC2_CFLAGS): Add $(CET_FLAGS). (CRTSTUFF_T_CFLAGS): Likewise. * configure.ac: Include ../config/cet.m4. Set and substitute CET_FLAGS. * configure: Regenerated. From-SVN: r254868
Diffstat (limited to 'config')
-rw-r--r--config/ChangeLog4
-rw-r--r--config/cet.m438
2 files changed, 42 insertions, 0 deletions
diff --git a/config/ChangeLog b/config/ChangeLog
index 90e1af4779d..2bb5244caa4 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,7 @@
+2017-11-17 Igor Tsimbalist <igor.v.tsimbalist@intel.com>
+
+ * cet.m4: New file.
+
2017-11-15 Alexandre Oliva <aoliva@redhat.com>
* bootstrap-debug-lean.mk (do-compare): Use the
diff --git a/config/cet.m4 b/config/cet.m4
new file mode 100644
index 00000000000..715f4bded19
--- /dev/null
+++ b/config/cet.m4
@@ -0,0 +1,38 @@
+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)
+case "$host" in
+ i[[34567]]86-*-linux* | x86_64-*-linux*)
+ case "$enable_cet" in
+ default)
+ # Check if assembler supports CET.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [],
+ [asm ("setssbsy");])],
+ [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"
+fi
+])