Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
dj/TryBot-32bit |
success
|
Build for i686
|
Commit Message
From: Alexandra Hájková <ahajkova@redhat.com>
Check if whether valgrind is available in the test environment.
If not, skip the test. Run smoke tests with valgrind to verify dynamic loader.
First, check if algrind works with the system ld.so in the test
environment. Then run the actual test inside the test environment,
using the just build ld.so and new libraries.
Co-authored-by: Mark Wielaard <mark@klomp.org>
---
elf/Makefile | 7 ++++++
elf/tst-valgrind-smoke.sh | 46 ++++++++++++++++++++++++++++++++++++
elf/valgrind-test.c | 49 +++++++++++++++++++++++++++++++++++++++
3 files changed, 102 insertions(+)
create mode 100644 elf/tst-valgrind-smoke.sh
create mode 100644 elf/valgrind-test.c
Comments
On Wed, Jan 12, 2022 at 6:15 PM Alexandra Hájková
<alexandra.khirnova@gmail.com> wrote:
>
> From: Alexandra Hájková <ahajkova@redhat.com>
>
> Check if whether valgrind is available in the test environment.
> If not, skip the test. Run smoke tests with valgrind to verify dynamic loader.
> First, check if algrind works with the system ld.so in the test
> environment. Then run the actual test inside the test environment,
> using the just build ld.so and new libraries.
>
> Co-authored-by: Mark Wielaard <mark@klomp.org>
Are there any objections to the new version?
Thank you,
Alexandra
I'm seeing
FAIL: elf/tst-valgrind-smoke
for the x86_64 configurations when running build-many-glibcs.py (and
UNSUPPORTED for other architectures). No execution tests of the newly
built glibc should be run at all unless
ifeq ($(run-built-tests),yes)
but I don't see any such conditional around the
tests-special += $(objpfx)tst-valgrind-smoke.out
that causes this test to be run.
On Mon, 24 Jan 2022, Joseph Myers wrote:
> I'm seeing
>
> FAIL: elf/tst-valgrind-smoke
>
> for the x86_64 configurations when running build-many-glibcs.py (and
> UNSUPPORTED for other architectures). No execution tests of the newly
> built glibc should be run at all unless
>
> ifeq ($(run-built-tests),yes)
>
> but I don't see any such conditional around the
>
> tests-special += $(objpfx)tst-valgrind-smoke.out
>
> that causes this test to be run.
I haven't seen any further comments on or fixes for this. We're very
close to a release, so please revert the patch introducing problems if
it's not going to be fixed in the next day or two.
Hi Joseph,
On Mon, 2022-01-24 at 18:34 +0000, Joseph Myers wrote:
> I'm seeing
>
> FAIL: elf/tst-valgrind-smoke
>
> for the x86_64 configurations when running build-many-glibcs.py (and
> UNSUPPORTED for other architectures). No execution tests of the newly
> built glibc should be run at all unless
>
> ifeq ($(run-built-tests),yes)
>
> but I don't see any such conditional around the
>
> tests-special += $(objpfx)tst-valgrind-smoke.out
>
> that causes this test to be run.
If your analysis is correct then the attached patch should solve the
issue. Could you try that out?
Thanks,
Mark
On Wed, 26 Jan 2022, Mark Wielaard wrote:
> If your analysis is correct then the attached patch should solve the
> issue. Could you try that out?
I confirm that this fixes the problem.
On Wed, Jan 26, 2022 at 06:40:10PM +0000, Joseph Myers wrote:
> On Wed, 26 Jan 2022, Mark Wielaard wrote:
>
> > If your analysis is correct then the attached patch should solve the
> > issue. Could you try that out?
>
> I confirm that this fixes the problem.
Great. I did a local make && make check and tst-valgrind-smoke.out is
still generated and the testcase still PASSes locally.
Can I push the patch as is to master, or are we that close to a
release that a release manager needs to ack the patch first?
Thanks,
Mark
@@ -327,6 +327,7 @@ tests += \
unload6 \
unload7 \
unload8 \
+ valgrind-test \
# reldep9
tests-cxx = \
tst-dlopen-nodelete-reloc \
@@ -361,6 +362,12 @@ tests-special += $(objpfx)tst-audit14-cmp.out $(objpfx)tst-audit15-cmp.out \
endif
endif
endif
+
+tests-special += $(objpfx)tst-valgrind-smoke.out
+$(objpfx)tst-valgrind-smoke.out: tst-valgrind-smoke.sh $(objpfx)ld.so $(objpfx)valgrind-test
+ $(SHELL) $< $(objpfx)ld.so $(rtlddir)/$(rtld-installed-name) '$(test-wrapper-env)' \
+ '$(run-program-env)' '$(rpath-link)' $(objpfx)valgrind-test > $@; $(evaluate-test)
+
tests += $(tests-execstack-$(have-z-execstack))
ifeq ($(run-built-tests),yes)
tests-special += $(objpfx)tst-leaks1-mem.out \
new file mode 100644
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Valgrind smoke test.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library 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
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <https://www.gnu.org/licenses/>.
+
+set -e
+
+rtld="$1"
+system_rtld="$2"
+test_wrapper_env="$3"
+run_program_env="$4"
+library_path="$5"
+test_prog="$6"
+
+# Test whether valgrind is available in the test
+# environment. If not, skip the test.
+${test_wrapper_env} ${run_program_env} \
+ /bin/sh -c "command -v valgrind" || exit 77
+
+# Test valgrind works with the system ld.so in the test environment
+/bin/sh -c \
+ "${test_wrapper_env} ${run_program_env} \
+ valgrind -q --error-exitcode=1 \
+ ${system_rtld} /bin/echo ${system_rtld}" || exit 77
+
+# Finally the actual test inside the test environment,
+# using the just build ld.so and new libraries to run
+# the smoke test under valgrind.
+/bin/sh -c \
+ "${test_wrapper_env} ${run_program_env} \
+ valgrind -q --error-exitcode=1 \
+ ${rtld} --library-path ${library_path} ${test_prog} ${rtld}"
new file mode 100644
@@ -0,0 +1,49 @@
+/* This is the simple test intended to be called by
+ tst-valgrind-smoke to perform vagrind smoke test.
+ Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <libintl.h>
+#include <locale.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <support/support.h>
+
+int
+main (int argc, char **argv)
+{
+ /* Do some non-trivial stuff that has been known to trigger
+ issues under valgrind in the past.
+ Setting up the locale textdomain makes sure to test some
+ string/path comparisons, file search and library loading. */
+ xsetlocale (LC_ALL, "");
+ if (bindtextdomain ("translit", "") == NULL)
+ return errno;
+ if (textdomain ("translit") == NULL)
+ return errno;
+
+ /* Show what we are executing and how... */
+ char *me = realpath (argv[0], NULL);
+ printf ("bin: %s\n", me);
+ printf ("ld.so: %s\n", argv[1]);
+ free (me);
+
+ return 0;
+}