On Wed, Oct 20, 2021 at 5:43 AM H.J. Lu <hjl.to...@gmail.com> wrote: > > When --enable-cet is used to configure GCC, enable Intel CET in libffi. > > * Makefile.am (AM_CFLAGS): Add $(CET_FLAGS). > (AM_CCASFLAGS): Likewise. > * configure.ac (CET_FLAGS): Add GCC_CET_FLAGS and AC_SUBST. > * Makefile.in: Regenerate. > * aclocal.m4: Likewise. > * configure: Likewise. > * fficonfig.h.in: Likewise. > * include/Makefile.in: Likewise. > * man/Makefile.in: Likewise. > * testsuite/Makefile.in: Likewise. > --- > libffi/Makefile.am | 4 +- > libffi/Makefile.in | 7 ++- > libffi/aclocal.m4 | 2 + > libffi/configure | 97 ++++++++++++++++++++++++++++++++++-- > libffi/configure.ac | 4 ++ > libffi/include/Makefile.in | 3 ++ > libffi/man/Makefile.in | 3 ++ > libffi/testsuite/Makefile.in | 3 ++ > 8 files changed, 116 insertions(+), 7 deletions(-) > > diff --git a/libffi/Makefile.am b/libffi/Makefile.am > index 02e36176c67..c6d6f849c53 100644 > --- a/libffi/Makefile.am > +++ b/libffi/Makefile.am > @@ -182,7 +182,7 @@ nodist_libffi_convenience_la_SOURCES = > $(nodist_libffi_la_SOURCES) > > LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) > > -AM_CFLAGS = -Wall -g -fexceptions > +AM_CFLAGS = -Wall -g -fexceptions $(CET_FLAGS) > if FFI_DEBUG > # Build debug. Define FFI_DEBUG on the commandline so that, when building > with > # MSVC, it can link against the debug CRT. > @@ -218,7 +218,7 @@ libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) > $(libffi_version_script > libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep) > > AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src > -AM_CCASFLAGS = $(AM_CPPFLAGS) > +AM_CCASFLAGS = $(AM_CPPFLAGS) $(CET_FLAGS) > > # Multilib support. Automake should provide these on its own. > all-recursive: all-multi > diff --git a/libffi/Makefile.in b/libffi/Makefile.in > index 6ff0c67a779..5524a6a571e 100644 > --- a/libffi/Makefile.in > +++ b/libffi/Makefile.in > @@ -99,7 +99,9 @@ subdir = . > ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 > am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ > $(top_srcdir)/../config/asmcfi.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 \ > @@ -320,6 +322,7 @@ CCAS = @CCAS@ > CCASDEPMODE = @CCASDEPMODE@ > CCASFLAGS = @CCASFLAGS@ > CCDEPMODE = @CCDEPMODE@ > +CET_FLAGS = @CET_FLAGS@ > CFLAGS = @CFLAGS@ > CPP = @CPP@ > CPPFLAGS = @CPPFLAGS@ > @@ -586,7 +589,7 @@ libffi_convenience_la_LIBADD = $(libffi_la_LIBADD) > libffi_convenience_la_DEPENDENCIES = $(libffi_la_DEPENDENCIES) > nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES) > LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) > -AM_CFLAGS = -Wall -g -fexceptions $(am__append_2) > +AM_CFLAGS = -Wall -g -fexceptions $(CET_FLAGS) $(am__append_2) > @LIBFFI_BUILD_VERSIONED_SHLIB_FALSE@libffi_version_script = > > @LIBFFI_BUILD_VERSIONED_SHLIB_GNU_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_script > = -Wl,--version-script,libffi.map > > @LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@libffi_version_script > = -Wl,-M,libffi.map-sun > @@ -597,7 +600,7 @@ libffi_version_info = -version-info `grep -v '^\#' > $(srcdir)/libtool-version` > libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) > $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS) > libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep) > AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src > -AM_CCASFLAGS = $(AM_CPPFLAGS) > +AM_CCASFLAGS = $(AM_CPPFLAGS) $(CET_FLAGS) > MULTISRCTOP = > MULTIBUILDTOP = > MULTIDIRS = > diff --git a/libffi/aclocal.m4 b/libffi/aclocal.m4 > index 9c8c88f8ca6..736ec308d5b 100644 > --- a/libffi/aclocal.m4 > +++ b/libffi/aclocal.m4 > @@ -1189,7 +1189,9 @@ AC_SUBST([am__untar]) > > m4_include([../config/acx.m4]) > m4_include([../config/asmcfi.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/libffi/configure b/libffi/configure > index 4bababb87f5..575641cca1d 100755 > --- a/libffi/configure > +++ b/libffi/configure > @@ -692,6 +692,7 @@ am__fastdepCCAS_TRUE > CCASDEPMODE > CCASFLAGS > CCAS > +CET_FLAGS > am__fastdepCXX_FALSE > am__fastdepCXX_TRUE > CXXDEPMODE > @@ -802,6 +803,7 @@ enable_multilib > enable_silent_rules > enable_generated_files_in_srcdir > enable_dependency_tracking > +enable_cet > enable_shared > enable_static > with_pic > @@ -1457,6 +1459,7 @@ Optional Features: > do not reject slow dependency extractors > --disable-dependency-tracking > speeds up one-time build > + --enable-cet enable Intel CET in target libraries [default=auto] > --enable-shared[=PKGS] build shared libraries [default=yes] > --enable-static[=PKGS] build static libraries [default=yes] > --enable-fast-install[=PKGS] > @@ -4877,6 +4880,95 @@ CFLAGS=$save_CFLAGS > > > > +# Add CET specific flags if CET is enabled > + > + # Check whether --enable-cet was given. > +if test "${enable_cet+set}" = set; then : > + enableval=$enable_cet; > + case "$enableval" in > + yes|no|auto) ;; > + *) as_fn_error $? "Unknown argument to enable/disable cet" "$LINENO" > 5 ;; > + esac > + > +else > + enable_cet=auto > +fi > + > + > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CET support" >&5 > +$as_echo_n "checking for CET support... " >&6; } > + > +# NB: Avoid nested save_CFLAGS and save_LDFLAGS. > +case "$host" in > + i[34567]86-*-linux* | x86_64-*-linux*) > + case "$enable_cet" in > + auto) > + # Check if target supports multi-byte NOPs > + # and if compiler and assembler support CET insn. > + cet_save_CFLAGS="$CFLAGS" > + CFLAGS="$CFLAGS -fcf-protection" > + cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > + > +int > +main () > +{ > + > +#if !defined(__SSE2__) > +#error target does not support multi-byte NOPs > +#else > +asm ("setssbsy"); > +#endif > + > + ; > + 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 > + CFLAGS="$cet_save_CFLAGS" > + ;; > + 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 > + ;; > +esac > +if test x$enable_cet = xyes; then > + CET_FLAGS="-fcf-protection -mshstk" > + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 > +$as_echo "yes" >&6; } > +else > + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 > +$as_echo "no" >&6; } > +fi > + > + > + > # By default we simply use the C compiler to build assembly code. > > test "${CCAS+set}" = set || CCAS=$CC > @@ -6901,7 +6993,6 @@ fi > > > > - > > > # Check whether --enable-libtool-lock was given. > @@ -11481,7 +11572,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 11484 "configure" > +#line 11575 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -11587,7 +11678,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 11590 "configure" > +#line 11681 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > diff --git a/libffi/configure.ac b/libffi/configure.ac > index bff5a1e7189..014d89d0423 100644 > --- a/libffi/configure.ac > +++ b/libffi/configure.ac > @@ -48,6 +48,10 @@ m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) > > AC_SUBST(CFLAGS) > > +# Add CET specific flags if CET is enabled > +GCC_CET_FLAGS(CET_FLAGS) > +AC_SUBST(CET_FLAGS) > + > AM_PROG_AS > AM_PROG_CC_C_O > AC_PROG_LIBTOOL > diff --git a/libffi/include/Makefile.in b/libffi/include/Makefile.in > index c76e2a8c6f5..879cb72296d 100644 > --- a/libffi/include/Makefile.in > +++ b/libffi/include/Makefile.in > @@ -93,7 +93,9 @@ subdir = include > ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 > am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ > $(top_srcdir)/../config/asmcfi.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 \ > @@ -192,6 +194,7 @@ CCAS = @CCAS@ > CCASDEPMODE = @CCASDEPMODE@ > CCASFLAGS = @CCASFLAGS@ > CCDEPMODE = @CCDEPMODE@ > +CET_FLAGS = @CET_FLAGS@ > CFLAGS = @CFLAGS@ > CPP = @CPP@ > CPPFLAGS = @CPPFLAGS@ > diff --git a/libffi/man/Makefile.in b/libffi/man/Makefile.in > index 8dbe52ff5af..9d4f96608c4 100644 > --- a/libffi/man/Makefile.in > +++ b/libffi/man/Makefile.in > @@ -92,7 +92,9 @@ subdir = man > ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 > am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ > $(top_srcdir)/../config/asmcfi.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 \ > @@ -174,6 +176,7 @@ CCAS = @CCAS@ > CCASDEPMODE = @CCASDEPMODE@ > CCASFLAGS = @CCASFLAGS@ > CCDEPMODE = @CCDEPMODE@ > +CET_FLAGS = @CET_FLAGS@ > CFLAGS = @CFLAGS@ > CPP = @CPP@ > CPPFLAGS = @CPPFLAGS@ > diff --git a/libffi/testsuite/Makefile.in b/libffi/testsuite/Makefile.in > index 3e9e937b752..a19b523e54a 100644 > --- a/libffi/testsuite/Makefile.in > +++ b/libffi/testsuite/Makefile.in > @@ -92,7 +92,9 @@ subdir = testsuite > ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 > am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ > $(top_srcdir)/../config/asmcfi.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 \ > @@ -147,6 +149,7 @@ CCAS = @CCAS@ > CCASDEPMODE = @CCASDEPMODE@ > CCASFLAGS = @CCASFLAGS@ > CCDEPMODE = @CCDEPMODE@ > +CET_FLAGS = @CET_FLAGS@ > CFLAGS = @CFLAGS@ > CPP = @CPP@ > CPPFLAGS = @CPPFLAGS@ > -- > 2.32.0 >
I am checking in this. -- H.J.