Robert Foley <robert.fo...@linaro.org> writes:
> Added a new docker for ubuntu 20.04. > This docker has support for Thread Sanitizer > including one patch we need in one of the header files. > https://github.com/llvm/llvm-project/commit/a72dc86cd > > This command will build with tsan enabled: > make docker-test-build-ubuntu2004 V=1 TSAN=1 > > Also added the TSAN suppresion file to disable certain > cases of TSAN warnings. > > Cc: Fam Zheng <f...@euphon.net> > Cc: Philippe Mathieu-Daudé <phi...@redhat.com> > Signed-off-by: Robert Foley <robert.fo...@linaro.org> > --- > tests/docker/Makefile.include | 2 + > tests/docker/common.rc | 19 +++++++ > tests/docker/dockerfiles/ubuntu2004.docker | 65 ++++++++++++++++++++++ > tests/tsan/blacklist.tsan | 10 ++++ > tests/tsan/suppressions.tsan | 14 +++++ > 5 files changed, 110 insertions(+) > create mode 100644 tests/docker/dockerfiles/ubuntu2004.docker > create mode 100644 tests/tsan/blacklist.tsan > create mode 100644 tests/tsan/suppressions.tsan > > diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include > index 43a8678688..e029e54b42 100644 > --- a/tests/docker/Makefile.include > +++ b/tests/docker/Makefile.include > @@ -202,6 +202,7 @@ endif > @echo ' (default is 1)' > @echo ' DEBUG=1 Stop and drop to shell in the created > container' > @echo ' before running the command.' > + @echo ' TSAN=1 Enable use of tsan during the > build/test.' I'd rather not pollute the build with another env flag, rather... > @echo ' NETWORK=1 Enable virtual network interface with > default backend.' > @echo ' NETWORK=$$BACKEND Enable virtual network interface with > $$BACKEND.' > @echo ' NOUSER Define to disable adding current user > to containers passwd.' > @@ -239,6 +240,7 @@ docker-run: docker-qemu-src > -e EXTRA_CONFIGURE_OPTS="$(EXTRA_CONFIGURE_OPTS)" \ > -e V=$V -e J=$J -e DEBUG=$(DEBUG) \ > -e SHOW_ENV=$(SHOW_ENV) \ > + $(if $(TSAN),,-e TSAN=$(TSAN)) \ > $(if $(NOUSER),, \ > -e CCACHE_DIR=/var/tmp/ccache \ > -v $(DOCKER_CCACHE_DIR):/var/tmp/ccache:z \ > diff --git a/tests/docker/common.rc b/tests/docker/common.rc > index 02cd67a8c5..5df93c6326 100755 > --- a/tests/docker/common.rc > +++ b/tests/docker/common.rc > @@ -27,6 +27,25 @@ requires() > > configure_qemu() > { > + if test -z "$TSAN"; then > + requires clang tsan > + echo "Including TSan Support" > + tsan_log_dir="/tmp/qemu-test/build/tsan" > + mkdir -p $tsan_log_dir > /dev/null || true > + EXTRA_CONFIGURE_OPTS="${EXTRA_CONFIGURE_OPTS} --enable-tsan \ > + --cc=clang-10 --cxx=clang++-10 \ > + --disable-werror --extra-cflags=-O0" > + # detect deadlocks is false currently simply because > + # TSan crashes immediately with deadlock detecter enabled. > + # We have maxed out the history size to get the best chance of > finding > + # warnings during testing. > + # Note, to get tsan to fail on warning, use exitcode=66 below. > + > tsan_opts="suppressions=/tmp/qemu-test/src/tests/tsan/suppressions.tsan\ > + detect_deadlocks=false history_size=7\ > + halt_on_error=0 exitcode=0 verbose=5\ > + log_path=$tsan_log_dir/tsan_warnings.txt" > + export TSAN_OPTIONS="$tsan_opts" > + fi ...I think it would be better to put this in it's own test (test-tsan?) -- Alex Bennée