From patchwork Thu Jul 2 23:32:26 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aaron Merey X-Patchwork-Id: 138380 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3FA124BA23EF for ; Thu, 2 Jul 2026 23:32:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3FA124BA23EF Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=EaoO0YCM X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTP id 7D1C04BA2E3B for ; Thu, 2 Jul 2026 23:32:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7D1C04BA2E3B Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7D1C04BA2E3B Authentication-Results: sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783035158; cv=none; b=ru1XPtvcShS4bSWx78Ck9gue5f+WYrmVFcm0ROXn3rGha85+ebG5+OkXzOZwkY7jEW4JUipnVvIZ1kwmimyMmD+W5BVppjnr5wP/0FwXc/WnMO+d3wog7mKqNi25gZ5rk8upNuxtQdMWfg1MkTKFpxw+060vrx9YY7hOG7tgF7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783035158; c=relaxed/simple; bh=RJzDsqUqaAn/h+IqHaa0n6ND4FBrIR4wceqBobrRxKU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=HVzve02+C8/Jl6m54QM1XwkYU077A1YhiMNZvDu+MCFruxAtifJSFD6bGcGYSjBl3Z6kwVzIuhjXuyJL/3jGDn2UK0Rewz3dX2Oen8rsr92SnbhvcOGwuwu68goHG9NR3sGrcXqgOAyvllrEEOOb0qR+lz/83tBtnNUKEF4X/9E= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=EaoO0YCM DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7D1C04BA2E3B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1783035158; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=7jtRSiTT9FajcbM4iLfmEUwGPldV8D3yitOke2f+bn4=; b=EaoO0YCMzPX+pk/vhAQXV+r6Z/Oy7Qt0u3uX4TeZp81lHBxiZrS/+YgQkik8QaEFuqL7v+ CDYJtgYzTbW5+CHQaIcxIJLKOVFdjT2tw/yqObnnzdEFTpBo2Ib1KgcqbbeYAvj85ux6tD rbVT20PZBb9WLqQyUP1AlWyHZ/FVG5Q= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-345-soqCj8LRP-SbCfjyx4iPMw-1; Thu, 02 Jul 2026 19:32:36 -0400 X-MC-Unique: soqCj8LRP-SbCfjyx4iPMw-1 X-Mimecast-MFC-AGG-ID: soqCj8LRP-SbCfjyx4iPMw_1783035156 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A08521945CB4 for ; Thu, 2 Jul 2026 23:32:35 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.22.64.2]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EDDCC1971E73; Thu, 2 Jul 2026 23:32:34 +0000 (UTC) From: Aaron Merey To: libabigail@sourceware.org Cc: Aaron Merey Subject: [PATCH] configure: Optionally pass --track-destroy to helgrind Date: Thu, 2 Jul 2026 19:32:26 -0400 Message-ID: <20260702233226.50725-1-amerey@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: bMTHb-la2HD6cJzAdMNmAyVF1R35OHSzqYxBN6AMlxI_1783035156 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, RCVD_IN_SBL_CSS, SPF_HELO_PASS, SPF_NONE, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libabigail-bounces~patchwork=sourceware.org@sourceware.org Helgrind in Valgrind >= 3.27 has a --track-destroy option that reports missing pthread_mutex_destroy/pthread_rwlock_destroy calls and warns when pthread_*_init is called on an address that still has a live lock record. This is useful for auditing lock lifecycles. Keep it off by default. Helgrind emits these reports as advisory messages and not errors. Calling pthread_*_destroy is not strictly necessary and does not always indicate an error. For example heap-allocated std::mutex instances are never pthread_mutex_destroy'd by libstdc++, so allocator memory reuse produces benign re-init reports (this may occur during libabigail testruns). * configure.ac: Add --enable-helgrind-track-destroy=yes|no|all, off by default. * autoconf-archive/ax_valgrind_check.m4 (VALGRIND_helgrind_FLAGS): Append --track-destroy to the default helgrind flags if it was enabled. Signed-off-by: Aaron Merey --- autoconf-archive/ax_valgrind_check.m4 | 2 +- configure.ac | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/autoconf-archive/ax_valgrind_check.m4 b/autoconf-archive/ax_valgrind_check.m4 index be834904..9ef740aa 100644 --- a/autoconf-archive/ax_valgrind_check.m4 +++ b/autoconf-archive/ax_valgrind_check.m4 @@ -159,7 +159,7 @@ m4_if(m4_defn([en_dflt_valgrind_]vgtool), [off], [= "yes"], [!= "no"]),[ VALGRIND_SUPPRESSIONS ?= $(addprefix --suppressions=,$(VALGRIND_SUPPRESSIONS_FILES)) VALGRIND_FLAGS ?= --num-callers=30 VALGRIND_memcheck_FLAGS ?= --leak-check=full --show-reachable=no -VALGRIND_helgrind_FLAGS ?= --history-level=approx +VALGRIND_helgrind_FLAGS ?= --history-level=approx $(HELGRIND_TRACK_DESTROY) VALGRIND_drd_FLAGS ?= VALGRIND_sgcheck_FLAGS ?= diff --git a/configure.ac b/configure.ac index 7aed81f4..52f9a041 100644 --- a/configure.ac +++ b/configure.ac @@ -991,6 +991,31 @@ AX_VALGRIND_DFLT(sgcheck, off) AX_VALGRIND_CHECK +AC_ARG_ENABLE(helgrind-track-destroy, + AS_HELP_STRING([--enable-helgrind-track-destroy=yes|no|all], + [have "make check-valgrind-helgrind" run helgrind with --track-destroy]), + ENABLE_HELGRIND_TRACK_DESTROY=$enableval, + ENABLE_HELGRIND_TRACK_DESTROY=no) + +if test x$ENABLE_HELGRIND_TRACK_DESTROY != xyes \ + -a x$ENABLE_HELGRIND_TRACK_DESTROY != xno \ + -a x$ENABLE_HELGRIND_TRACK_DESTROY != xall; then + AC_MSG_ERROR([bad value --enable-helgrind-track-destroy; use yes, no or all]) +fi + +HELGRIND_TRACK_DESTROY= +if test x$ENABLE_HELGRIND_TRACK_DESTROY != xno; then + if test x$enable_valgrind_helgrind != xyes; then + AC_MSG_ERROR([--enable-helgrind-track-destroy needs helgrind; reconfigure with --enable-valgrind]) + fi + if $VALGRIND --tool=helgrind --help 2>/dev/null | grep -qe "--track-destroy"; then + HELGRIND_TRACK_DESTROY="--track-destroy=$ENABLE_HELGRIND_TRACK_DESTROY" + else + AC_MSG_ERROR([helgrind does not support --track-destroy]) + fi +fi +AC_SUBST(HELGRIND_TRACK_DESTROY) + if test x$ENABLE_MULTITHREADING != xno; then saved_CPPFLAGS="$CPPFLAGS" @@ -1742,6 +1767,7 @@ AC_MSG_NOTICE([ Enable BTF front-end : ${ENABLE_BTF} Enable Big Libabigail tests : ${ENABLE_BIG_TESTS} Enable running tests under Valgrind : ${enable_valgrind} + Enable helgrind --track-destroy : ${ENABLE_HELGRIND_TRACK_DESTROY} Enable build with -fsanitize=address : ${ENABLE_ASAN} Enable build with -fsanitize=memory : ${ENABLE_MSAN} Enable build with -fsanitize=thread : ${ENABLE_TSAN}