Browse Source
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>pull/94/head
committed by
Alex Bennée
4 changed files with 133 additions and 0 deletions
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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