From patchwork Wed Oct 20 12:43:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 46438 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0141D3857C58 for ; Wed, 20 Oct 2021 12:43:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0141D3857C58 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1634733830; bh=idD0DmbrWJASUS0ngLVVbc6jqc3DN6JmxbL9ZtEfM0g=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=QG8YWnuv0UMPcsf0BruWnUFmi3rSxOpm5Rb5+y0uR3nFWzeZKzeFgyUrJyOX/jKjd UX5o9iBDyifGgx4/2lsgYcbK7v6REr3tFpKQAQgQzUIWfSPmob7+1uV4QlgMeYvi87 3kameqTAydVsnhPvvPCcwfHvnJwEOT3NIoO2Juc0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x435.google.com (mail-pf1-x435.google.com [IPv6:2607:f8b0:4864:20::435]) by sourceware.org (Postfix) with ESMTPS id 6DF243858C3A for ; Wed, 20 Oct 2021 12:43:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6DF243858C3A Received: by mail-pf1-x435.google.com with SMTP id t184so2908177pfd.0 for ; Wed, 20 Oct 2021 05:43:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=idD0DmbrWJASUS0ngLVVbc6jqc3DN6JmxbL9ZtEfM0g=; b=y3MvnPGZXi+b6sm5XIkvVRCbmXqM8m/arxJpjTs2y9LjYK2PRCR4S750L006yHfNKY LZ/tCtd2FzM8SXQb9/UJROn28P4zWqBBJ4kVbXEqZ8EH4aREnZlv3yltoglDGnqjA5/D lHA8nBPefxWob12y4zEGbZc31MfZcqPvelKe5u4Mt867RoUoGsDYASGSemDNBc7NV6pH njBWzEzTpG6MWc80je6CSJAIFWhSj4Mro131+FHiSgh1BFILoMK/fLQvvIisJYn0rRJ3 6/i/Rc99D32glw2UqXVP22YVj6gPqsUQqvOpEFkOottrA68gm62YwherF04OWzduIGgE ZQFw== X-Gm-Message-State: AOAM531qRi7e+bL1r/p8QOGUu7vh8sjF7XsjeXD6K/h/1B6CGJTPWFMw QdQ5VzKFjDLsYtE/n2qlsvfh57vqdy4= X-Google-Smtp-Source: ABdhPJxXwopN2kjmA/hMcGy9g4TxcZvkLQdXtxBI3KFsBT6BKbw0U5swxpMNq7jKp/nmPtI5JKeZlA== X-Received: by 2002:a62:7688:0:b0:44d:186d:c4bd with SMTP id r130-20020a627688000000b0044d186dc4bdmr6185438pfc.71.1634733797191; Wed, 20 Oct 2021 05:43:17 -0700 (PDT) Received: from gnu-cfl-2.localdomain ([2607:fb90:a48a:adf1:e15a:7fe6:0:c66]) by smtp.gmail.com with ESMTPSA id bp19sm2161084pjb.46.2021.10.20.05.43.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Oct 2021 05:43:16 -0700 (PDT) Received: from gnu-tgl-2.localdomain (gnu-tgl-2 [192.168.1.34]) by gnu-cfl-2.localdomain (Postfix) with ESMTPS id E89131A093C for ; Wed, 20 Oct 2021 05:43:15 -0700 (PDT) Received: from gnu-tgl-2.. (localhost [IPv6:::1]) by gnu-tgl-2.localdomain (Postfix) with ESMTP id ADD2E3006A7 for ; Wed, 20 Oct 2021 05:43:14 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [PATCH] libffi: Add --enable-cet to configure Date: Wed, 20 Oct 2021 05:43:14 -0700 Message-Id: <20211020124314.3527-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 X-Spam-Status: No, score=-3032.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: "H.J. Lu via Gcc-patches" From: "H.J. Lu" Reply-To: "H.J. Lu" Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" 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@