mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
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.
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
4 changed files with 133 additions and 0 deletions
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…
Add table
Add a link
Reference in a new issue