tests/docker: Added docker build support for TSan.
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-tsan-ubuntu2004 V=1 Also added the TSAN suppresion file to disable certain cases of TSAN warnings. Cc: Fam Zheng <fam@euphon.net> Cc: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Robert Foley <robert.foley@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20200609200738.445-10-robert.foley@linaro.org> Message-Id: <20200612190237.30436-13-alex.bennee@linaro.org>
This commit is contained in:
parent
45a9595a1b
commit
df79fd5667
65
tests/docker/dockerfiles/ubuntu2004.docker
Normal file
65
tests/docker/dockerfiles/ubuntu2004.docker
Normal file
@ -0,0 +1,65 @@
|
||||
FROM ubuntu:20.04
|
||||
ENV PACKAGES flex bison \
|
||||
ccache \
|
||||
clang-10\
|
||||
gcc \
|
||||
gettext \
|
||||
git \
|
||||
glusterfs-common \
|
||||
libaio-dev \
|
||||
libattr1-dev \
|
||||
libbrlapi-dev \
|
||||
libbz2-dev \
|
||||
libcacard-dev \
|
||||
libcap-ng-dev \
|
||||
libcurl4-gnutls-dev \
|
||||
libdrm-dev \
|
||||
libepoxy-dev \
|
||||
libfdt-dev \
|
||||
libgbm-dev \
|
||||
libgtk-3-dev \
|
||||
libibverbs-dev \
|
||||
libiscsi-dev \
|
||||
libjemalloc-dev \
|
||||
libjpeg-turbo8-dev \
|
||||
liblzo2-dev \
|
||||
libncurses5-dev \
|
||||
libncursesw5-dev \
|
||||
libnfs-dev \
|
||||
libnss3-dev \
|
||||
libnuma-dev \
|
||||
libpixman-1-dev \
|
||||
librados-dev \
|
||||
librbd-dev \
|
||||
librdmacm-dev \
|
||||
libsasl2-dev \
|
||||
libsdl2-dev \
|
||||
libseccomp-dev \
|
||||
libsnappy-dev \
|
||||
libspice-protocol-dev \
|
||||
libspice-server-dev \
|
||||
libssh-dev \
|
||||
libusb-1.0-0-dev \
|
||||
libusbredirhost-dev \
|
||||
libvdeplug-dev \
|
||||
libvte-2.91-dev \
|
||||
libxen-dev \
|
||||
libzstd-dev \
|
||||
make \
|
||||
python3-yaml \
|
||||
python3-sphinx \
|
||||
sparse \
|
||||
texinfo \
|
||||
xfslibs-dev\
|
||||
vim
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get -y install $PACKAGES
|
||||
RUN dpkg -l $PACKAGES | sort > /packages.txt
|
||||
ENV FEATURES clang tsan pyyaml sdl2
|
||||
|
||||
# https://bugs.launchpad.net/qemu/+bug/1838763
|
||||
ENV QEMU_CONFIGURE_OPTS --disable-libssh
|
||||
|
||||
# Apply patch https://reviews.llvm.org/D75820
|
||||
# This is required for TSan in clang-10 to compile with QEMU.
|
||||
RUN sed -i 's/^const/static const/g' /usr/lib/llvm-10/lib/clang/10.0.0/include/sanitizer/tsan_interface.h
|
44
tests/docker/test-tsan
Executable file
44
tests/docker/test-tsan
Executable file
@ -0,0 +1,44 @@
|
||||
#!/bin/bash -e
|
||||
#
|
||||
# This test will use TSan as part of a build and a make check.
|
||||
#
|
||||
# Copyright (c) 2020 Linaro
|
||||
# Copyright (c) 2016 Red Hat Inc.
|
||||
#
|
||||
# Authors:
|
||||
# Robert Foley <robert.foley@linaro.org>
|
||||
# Originally based on test-quick from Fam Zheng <famz@redhat.com>
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2
|
||||
# or (at your option) any later version. See the COPYING file in
|
||||
# the top-level directory.
|
||||
|
||||
. common.rc
|
||||
|
||||
setup_tsan()
|
||||
{
|
||||
requires clang tsan
|
||||
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 detector 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_warning"
|
||||
export TSAN_OPTIONS="$tsan_opts"
|
||||
}
|
||||
|
||||
cd "$BUILD_DIR"
|
||||
|
||||
TARGET_LIST=${TARGET_LIST:-$DEF_TARGET_LIST} \
|
||||
setup_tsan
|
||||
build_qemu
|
||||
check_qemu
|
||||
install_qemu
|
10
tests/tsan/blacklist.tsan
Normal file
10
tests/tsan/blacklist.tsan
Normal file
@ -0,0 +1,10 @@
|
||||
# This is an example blacklist.
|
||||
# To enable use of the blacklist add this to configure:
|
||||
# "--extra-cflags=-fsanitize-blacklist=<src path>/tests/tsan/blacklist.tsan"
|
||||
# The eventual goal would be to fix these warnings.
|
||||
|
||||
# TSan is not happy about setting/getting of dirty bits,
|
||||
# for example, cpu_physical_memory_set_dirty_range,
|
||||
# and cpu_physical_memory_get_dirty.
|
||||
src:bitops.c
|
||||
src:bitmap.c
|
14
tests/tsan/suppressions.tsan
Normal file
14
tests/tsan/suppressions.tsan
Normal file
@ -0,0 +1,14 @@
|
||||
# This is the set of runtime suppressions of TSan warnings.
|
||||
# The goal would be to have here only items we do not
|
||||
# plan to fix, and to explain why for each item.
|
||||
|
||||
# TSan reports a double lock on RECURSIVE mutexes.
|
||||
# Since the recursive lock is intentional, we choose to ignore it.
|
||||
mutex:aio_context_acquire
|
||||
mutex:pthread_mutex_lock
|
||||
|
||||
# TSan reports a race betwen pthread_mutex_init() and
|
||||
# pthread_mutex_lock(). Since this is outside of QEMU,
|
||||
# we choose to ignore it.
|
||||
race:pthread_mutex_init
|
||||
race:pthread_mutex_lock
|
Loading…
Reference in New Issue
Block a user