From patchwork Thu Oct 26 22:24:32 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 10028827 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3DC99601E8 for ; Thu, 26 Oct 2017 22:24:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2C8222847B for ; Thu, 26 Oct 2017 22:24:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1E3E528508; Thu, 26 Oct 2017 22:24:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 95EA92847B for ; Thu, 26 Oct 2017 22:24:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751305AbdJZWYg (ORCPT ); Thu, 26 Oct 2017 18:24:36 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:31881 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751228AbdJZWYg (ORCPT ); Thu, 26 Oct 2017 18:24:36 -0400 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id v9QMOX5t017208 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Oct 2017 22:24:34 GMT Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id v9QMOX3f027016 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Oct 2017 22:24:33 GMT Received: from abhmp0006.oracle.com (abhmp0006.oracle.com [141.146.116.12]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id v9QMOXJd020672; Thu, 26 Oct 2017 22:24:33 GMT Received: from localhost (/10.145.178.58) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 26 Oct 2017 15:24:33 -0700 Date: Thu, 26 Oct 2017 15:24:32 -0700 From: "Darrick J. Wong" To: sandeen@redhat.com Cc: linux-xfs@vger.kernel.org Subject: [PATCH v2 09/10] misc: enable thread sanitizer if requested Message-ID: <20171026222432.GE5483@magnolia> References: <150905608689.28563.9670731739870415773.stgit@magnolia> <150905614967.28563.13207982162984486911.stgit@magnolia> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <150905614967.28563.13207982162984486911.stgit@magnolia> User-Agent: Mutt/1.5.24 (2015-08-30) X-Source-IP: aserv0022.oracle.com [141.146.126.234] Sender: linux-xfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Darrick J. Wong Enable the gcc/clang thread data corruption sanitizer if the builder requests it and it's available. Signed-off-by: Darrick J. Wong --- configure.ac | 17 +++++++++++++++++ debian/rules | 4 ++-- include/builddefs.in | 4 ++-- m4/package_sanitizer.m4 | 20 ++++++++++++++++++++ 4 files changed, 41 insertions(+), 4 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/configure.ac b/configure.ac index 764b22b..210e606 100644 --- a/configure.ac +++ b/configure.ac @@ -84,6 +84,12 @@ AC_ARG_ENABLE(addrsan, enable_addrsan=no) AC_SUBST(enable_addrsan) +# Enable THREADSAN; set enable_threadsan=probe to enable autoprobe. +AC_ARG_ENABLE(threadsan, +[ --enable-threadsan=[yes/no] Enable Thread Sanitizer (THREADSAN) [default=no]],, + enable_threadsan=no) +AC_SUBST(enable_threadsan) + # # If the user specified a libdir ending in lib64 do not append another # 64 to the library names. @@ -174,6 +180,17 @@ if test "$enable_addrsan" = "yes" && test "$have_addrsan" != "yes"; then AC_MSG_ERROR([ADDRSAN not supported by compiler.]) fi +if test "$enable_threadsan" = "yes" || test "$enable_threadsan" = "probe"; then + AC_PACKAGE_CHECK_THREADSAN +fi +if test "$enable_threadsan" = "yes" && test "$have_threadsan" != "yes"; then + AC_MSG_ERROR([THREADSAN not supported by compiler.]) +fi + +if test "$have_threadsan" = "yes" && test "$have_addrsan" = "yes"; then + AC_MSG_WARN([ADDRSAN and THREADSAN are not known to work together.]) +fi + AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([char *]) AC_TYPE_UMODE_T diff --git a/debian/rules b/debian/rules index 6b6f45b..f186d79 100755 --- a/debian/rules +++ b/debian/rules @@ -20,9 +20,9 @@ stdenv = @GZIP=-q; export GZIP; options = export DEBUG=-DNDEBUG DISTRIBUTION=debian \ INSTALL_USER=root INSTALL_GROUP=root \ - LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes --disable-ubsan --disable-addrsan" ; + LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes --enable-blkid=yes --disable-ubsan --disable-addrsan --disable-threadsan" ; diopts = $(options) \ - export OPTIMIZER=-Os LOCAL_CONFIGURE_OPTIONS="--enable-gettext=no --disable-ubsan --disable-addrsan" ; + export OPTIMIZER=-Os LOCAL_CONFIGURE_OPTIONS="--enable-gettext=no --disable-ubsan --disable-addrsan --disable-threadsan" ; checkdir = test -f debian/rules build: built diff --git a/include/builddefs.in b/include/builddefs.in index 7c78d4b..2df12a7 100644 --- a/include/builddefs.in +++ b/include/builddefs.in @@ -155,8 +155,8 @@ ifeq ($(HAVE_GETFSMAP),yes) PCFLAGS+= -DHAVE_GETFSMAP endif -SANITIZER_CFLAGS += @addrsan_cflags@ @ubsan_cflags@ -SANITIZER_LDFLAGS += @addrsan_ldflags@ @ubsan_ldflags@ +SANITIZER_CFLAGS += @addrsan_cflags@ @threadsan_cflags@ @ubsan_cflags@ +SANITIZER_LDFLAGS += @addrsan_ldflags@ @threadsan_ldflags@ @ubsan_ldflags@ GCFLAGS = $(DEBUG) \ -DVERSION=\"$(PKG_VERSION)\" -DLOCALEDIR=\"$(PKG_LOCALE_DIR)\" \ diff --git a/m4/package_sanitizer.m4 b/m4/package_sanitizer.m4 index 06031ad..41b7299 100644 --- a/m4/package_sanitizer.m4 +++ b/m4/package_sanitizer.m4 @@ -37,3 +37,23 @@ AC_DEFUN([AC_PACKAGE_CHECK_ADDRSAN], AC_SUBST(addrsan_cflags) AC_SUBST(addrsan_ldflags) ]) + +AC_DEFUN([AC_PACKAGE_CHECK_THREADSAN], + [ AC_MSG_CHECKING([if C compiler supports THREADSAN]) + OLD_CFLAGS="$CFLAGS" + OLD_LDFLAGS="$LDFLAGS" + THREADSAN_FLAGS="-fsanitize=thread" + CFLAGS="$CFLAGS $THREADSAN_FLAGS" + LDFLAGS="$LDFLAGS $ADRSAN_FLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [threadsan_cflags=$THREADSAN_FLAGS] + [threadsan_ldflags=$THREADSAN_FLAGS] + [have_threadsan=yes], + [AC_MSG_RESULT([no])]) + CFLAGS="${OLD_CFLAGS}" + LDFLAGS="${OLD_LDFLAGS}" + AC_SUBST(have_threadsan) + AC_SUBST(threadsan_cflags) + AC_SUBST(threadsan_ldflags) + ])