From db5978749148cd35c97145ea52e7a5e07121b27e Mon Sep 17 00:00:00 2001
From: Igor Tsimbalist <igor.v.tsimbalist@intel.com>
Date: Thu, 10 Aug 2017 14:20:31 +0300
Subject: [PATCH 10/21] Enable building libcilkrts with Intel CET

libcilkrts/
	* Makefile.am: Add AM_CXXFLAGS.
	* configure.ac: Set CET_FLAGS, update XCFLAGS, XCXXFLAGS.
	* Makefile.in: Regenerate.
	* aclocal.m4: Likewise.
	* configure: Likewise.
---
 libcilkrts/Makefile.am  |  1 +
 libcilkrts/Makefile.in  |  4 +++
 libcilkrts/aclocal.m4   |  2 ++
 libcilkrts/configure    | 81 +++++++++++++++++++++++++++++++++++++++++++++++--
 libcilkrts/configure.ac |  6 ++++
 5 files changed, 92 insertions(+), 2 deletions(-)

diff --git a/libcilkrts/Makefile.am b/libcilkrts/Makefile.am
index 2a0fcad..5fa70a2 100644
--- a/libcilkrts/Makefile.am
+++ b/libcilkrts/Makefile.am
@@ -59,6 +59,7 @@ GENERAL_FLAGS += -funwind-tables
 
 AM_CFLAGS = $(XCFLAGS) $(GENERAL_FLAGS) -std=c99
 AM_CPPFLAGS = $(GENERAL_FLAGS)
+AM_CXXFLAGS = $(XCXXFLAGS)
 AM_LDFLAGS = $(XLDFLAGS)
 
 # May be used by toolexeclibdir.
diff --git a/libcilkrts/Makefile.in b/libcilkrts/Makefile.in
index a89960d..7b7b20f 100644
--- a/libcilkrts/Makefile.in
+++ b/libcilkrts/Makefile.in
@@ -162,7 +162,9 @@ DIST_COMMON = $(srcdir)/include/internal/rev.mk README ChangeLog \
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
+	$(top_srcdir)/../config/cet.m4 \
 	$(top_srcdir)/../config/depstand.m4 \
+	$(top_srcdir)/../config/enable.m4 \
 	$(top_srcdir)/../config/lead-dot.m4 \
 	$(top_srcdir)/../config/multi.m4 \
 	$(top_srcdir)/../config/override.m4 \
@@ -324,6 +326,7 @@ SHELL = @SHELL@
 STRIP = @STRIP@
 VERSION = @VERSION@
 XCFLAGS = @XCFLAGS@
+XCXXFLAGS = @XCXXFLAGS@
 XLDFLAGS = @XLDFLAGS@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
@@ -405,6 +408,7 @@ GENERAL_FLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/runtime \
 	-funwind-tables
 AM_CFLAGS = $(XCFLAGS) $(GENERAL_FLAGS) -std=c99
 AM_CPPFLAGS = $(GENERAL_FLAGS)
+AM_CXXFLAGS = $(XCXXFLAGS)
 AM_LDFLAGS = $(XLDFLAGS)
 
 # May be used by toolexeclibdir.
diff --git a/libcilkrts/aclocal.m4 b/libcilkrts/aclocal.m4
index 4bb1d43..e13f133 100644
--- a/libcilkrts/aclocal.m4
+++ b/libcilkrts/aclocal.m4
@@ -989,7 +989,9 @@ AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
 m4_include([../config/acx.m4])
+m4_include([../config/cet.m4])
 m4_include([../config/depstand.m4])
+m4_include([../config/enable.m4])
 m4_include([../config/lead-dot.m4])
 m4_include([../config/multi.m4])
 m4_include([../config/override.m4])
diff --git a/libcilkrts/configure b/libcilkrts/configure
index 3cc8c99..c728abf 100644
--- a/libcilkrts/configure
+++ b/libcilkrts/configure
@@ -607,6 +607,7 @@ LIBOBJS
 get_gcc_base_ver
 link_cilkrts
 XLDFLAGS
+XCXXFLAGS
 XCFLAGS
 lt_cv_dlopen_libs
 toolexeclibdir
@@ -750,6 +751,7 @@ with_pic
 enable_fast_install
 with_gnu_ld
 enable_libtool_lock
+enable_cet
 with_gcc_major_version_only
 '
       ac_precious_vars='build_alias
@@ -1399,6 +1401,8 @@ Optional Features:
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-cet            enable Intel CET in target libraries
+                          [default=default]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -11941,7 +11945,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11944 "configure"
+#line 11948 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12047,7 +12051,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12050 "configure"
+#line 12054 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -15394,6 +15398,79 @@ case "${target}" in
 
 esac
 
+# Add CET specific flags is Intel CET is enabled.
+ # Check whether --enable-cet was given.
+if test "${enable_cet+set}" = set; then :
+  enableval=$enable_cet;
+      case "$enableval" in
+       yes|no|default) ;;
+       *) as_fn_error "Unknown argument to enable/disable cet" "$LINENO" 5 ;;
+                          esac
+
+else
+  enable_cet=default
+fi
+
+
+case "$host" in
+  i3456786-*-linux* | x86_64-*-linux*)
+    enable_cet_compatibility=yes
+    case "$enable_cet" in
+      default)
+	# Check if assembler supports CET.
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+asm ("setssbsy");
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  enable_cet=yes
+else
+  enable_cet=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+	;;
+      yes)
+	# Check if assembler supports CET.
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+asm ("setssbsy");
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  as_fn_error "assembler with CET support is required for --enable-cet" "$LINENO" 5
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+	;;
+    esac
+    ;;
+  *)
+    enable_cet=no
+    enable_cet_compatibility=no
+    ;;
+esac
+if test x$enable_cet = xyes; then
+  CET_FLAGS="-fcf-protection -mcet"
+fi
+
+XCFLAGS="$XCFLAGS $CET_FLAGS"
+XCXXFLAGS="$XCXXFLAGS $CET_FLAGS"
+
+
 
 
 
diff --git a/libcilkrts/configure.ac b/libcilkrts/configure.ac
index 9cf9052..4dcfc1c 100644
--- a/libcilkrts/configure.ac
+++ b/libcilkrts/configure.ac
@@ -241,7 +241,13 @@ case "${target}" in
 
 esac
 
+# Add CET specific flags is Intel CET is enabled.
+GCC_CET_FLAGS(CET_FLAGS)
+XCFLAGS="$XCFLAGS $CET_FLAGS"
+XCXXFLAGS="$XCXXFLAGS $CET_FLAGS"
+
 AC_SUBST(XCFLAGS)
+AC_SUBST(XCXXFLAGS)
 AC_SUBST(XLDFLAGS)
 
 CFLAGS="$save_CFLAGS"
-- 
1.8.3.1

