[11/15] Add tests/thread-safety-subr.sh
Commit Message
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 <amerey@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
Comments
Hi Aaron,
On Sun, 2025-01-19 at 22:20 -0500, Aaron Merey wrote:
> 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 <amerey@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
> +}
Are these last two tests necessary? Isn't configure already checking
for that?
Cheers,
Mark
@@ -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
new file mode 100644
@@ -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
+}