thread-safety-subr.sh contains subroutine check_thread_safety_enabled which skips further testing when either USE_LOCKS is false or when attempting to use valgrind with address or memory sanitizer enabled.
* tests/Makefile.am (EXTRA_DIST): Add thread-safety-subr.sh. * tests/thread-safety-subr.sh: New file. Signed-off-by: Aaron Merey <ame...@redhat.com> --- tests/Makefile.am | 1 + tests/thread-safety-subr.sh | 53 +++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 tests/thread-safety-subr.sh diff --git a/tests/Makefile.am b/tests/Makefile.am index e4fe72f0..9ca97b6f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -689,6 +689,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile-dwp-cu-index-overflow.source \ testfile-define-file.bz2 \ testfile-sysroot.tar.bz2 run-sysroot.sh run-debuginfod-seekable.sh + thread-safety-subr.sh if USE_HELGRIND diff --git a/tests/thread-safety-subr.sh b/tests/thread-safety-subr.sh new file mode 100644 index 00000000..9d361850 --- /dev/null +++ b/tests/thread-safety-subr.sh @@ -0,0 +1,53 @@ +#! /bin/sh +# Subroutines for thread safety testing +# Copyright (C) 2024 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. $srcdir/test-subr.sh + +# Verify that thread safety tests can be run. If not, skip further testing. +check_thread_safety_enabled() +{ + # Extract build settings. + USE_LOCKS=$(grep '^#define USE_LOCKS' \ + ${abs_builddir}/../config.h | awk '{print $3}') + USE_ADDRESS_SANITIZER=$(grep 'USE_ADDRESS_SANITIZER_TRUE' \ + ${abs_builddir}/../config.status | awk -F'=' '{print $2}') + USE_MEMORY_SANITIZER=$(grep 'USE_MEMORY_SANITIZER_TRUE' \ + ${abs_builddir}/../config.status | awk -F'=' '{print $2}') + + # Test will only be run if USE_LOCKS is defined. Otherwise, skip. + if [[ "$USE_LOCKS" != 1 ]]; then + echo "USE_LOCKS is not defined. Skipping test." + exit 77 + fi + + if [[ "x$VALGRIND_CMD" == "x" ]]; then + return 0 + fi + + # Cannot use Valgrind and Address Sanitizer together. + if [[ "$USE_ADDRESS_SANITIZER" != "\"#\"" ]]; then + echo "Address Sanitizer is enabled. Skipping test." + exit 77 + fi + + # Cannot use Valgrind and Memory Sanitizer together. + if [[ "$USE_MEMORY_SANITIZER" != "\"#\"" ]]; then + echo "Memory Sanitizer is enabled. Skipping test." + exit 77 + fi +} -- 2.47.1