mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
Merge #19041: ci: tsan with -stdlib=libc++-10
faf62e6ed0
ci: Remove unused workaround (MarcoFalke)fa7c850915
ci: Install llvm to get llvm symbolizer (MarcoFalke)fa563cef61
test: Add more tsan suppressions (MarcoFalke)fa0cc02c0a
ci: Mute depends logs completely (MarcoFalke)fa906bf298
test: Extend tsan suppressions for clang stdlib (MarcoFalke)fa10d85079
ci: Use libc++ instead of libstdc++ for tsan (MarcoFalke)fa0d5ee112
ci: Set halt_on_error=1 for tsan (MarcoFalke)fa2ffe87f7
ci: Deduplicate DOCKER_EXEC (MarcoFalke)fac2eeeb9d
cirrus: Remove no longer needed install step (MarcoFalke) Pull request description: According to the [ThreadSanitizer docs](https://clang.llvm.org/docs/ThreadSanitizer.html#current-status): > C++11 threading is supported with **llvm libc++**. For example, the thread sanitizer build is currently not checking for double lock of mutexes. Fixes (partially) https://github.com/bitcoin/bitcoin/issues/19038#issuecomment-632138003 ACKs for top commit: practicalswift: ACKfaf62e6ed0
fanquake: ACKfaf62e6ed0
hebasto: ACKfaf62e6ed0
, maybe re-organize commits to modify suppressions in a single one? Tree-SHA512: 98ce5154b4736dfb811ffdb6e6f63a7bc25fe50d3b73134404a8f3715ad53626c31f9c8132dbacf85de47b9409f1e17a4399e35f78b1da30b1577167ea2982ad
This commit is contained in:
commit
575589a62e
7 changed files with 37 additions and 22 deletions
|
@ -30,9 +30,5 @@ task:
|
|||
folder: "/tmp/ccache_dir"
|
||||
depends_built_cache:
|
||||
folder: "/tmp/cirrus-ci-build/depends/built"
|
||||
install_script:
|
||||
- apt-get update
|
||||
- apt-get -y install git bash ccache
|
||||
- ccache --max-size=${CCACHE_SIZE}
|
||||
ci_script:
|
||||
- ./ci/test_run_all.sh
|
||||
|
|
|
@ -112,7 +112,7 @@ jobs:
|
|||
FILE_ENV="./ci/test/00_setup_env_native_qt5.sh"
|
||||
|
||||
- stage: test
|
||||
name: 'x86_64 Linux [GOAL: install] [bionic] [no depends, only system libs, sanitizers: thread (TSan), no wallet]'
|
||||
name: 'x86_64 Linux [GOAL: install] [focal] [depends, sanitizers: thread (TSan), no wallet, no gui]'
|
||||
# Not enough memory on travis machines, so feature_block is excluded for now
|
||||
env: >-
|
||||
TEST_RUNNER_EXTRA="--exclude feature_block"
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
export LC_ALL=C.UTF-8
|
||||
|
||||
export CONTAINER_NAME=ci_native_tsan
|
||||
export DOCKER_NAME_TAG=ubuntu:18.04
|
||||
export PACKAGES="clang-9 llvm-9 python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev"
|
||||
export NO_DEPENDS=1
|
||||
export DOCKER_NAME_TAG=ubuntu:20.04
|
||||
export PACKAGES="clang llvm libc++abi-dev libc++-dev python3-zmq"
|
||||
export DEP_OPTS="CC=clang CXX='clang++ -stdlib=libc++'"
|
||||
export GOAL="install"
|
||||
export BITCOIN_CONFIG="--enable-zmq --disable-wallet --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=thread --disable-hardening --disable-asm CC=clang-9 CXX=clang++-9"
|
||||
export BITCOIN_CONFIG="--enable-zmq --disable-wallet --with-gui=no CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=thread CC=clang CXX='clang++ -stdlib=libc++'"
|
||||
|
|
|
@ -6,10 +6,6 @@
|
|||
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
# Add llvm-symbolizer directory to PATH. Needed to get symbolized stack traces from the sanitizers.
|
||||
PATH=$PATH:/usr/lib/llvm-6.0/bin/
|
||||
export PATH
|
||||
|
||||
BEGIN_FOLD () {
|
||||
echo ""
|
||||
CURRENT_FOLD_NAME=$1
|
||||
|
|
|
@ -24,7 +24,7 @@ mkdir -p "${PREVIOUS_RELEASES_DIR}"
|
|||
|
||||
export ASAN_OPTIONS="detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1"
|
||||
export LSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/lsan"
|
||||
export TSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/tsan:log_path=${BASE_SCRATCH_DIR}/sanitizer-output/tsan"
|
||||
export TSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/tsan:halt_on_error=1:log_path=${BASE_SCRATCH_DIR}/sanitizer-output/tsan"
|
||||
export UBSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1:report_error_type=1"
|
||||
env | grep -E '^(BITCOIN_CONFIG|BASE_|QEMU_|CCACHE_|LC_ALL|BOOST_TEST_RANDOM|DEBIAN_FRONTEND|CONFIG_SHELL|(ASAN|LSAN|TSAN|UBSAN)_OPTIONS|PREVIOUS_RELEASES_DIR)' | tee /tmp/env
|
||||
if [[ $HOST = *-mingw32 ]]; then
|
||||
|
@ -48,16 +48,14 @@ if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then
|
|||
--env-file /tmp/env \
|
||||
--name $CONTAINER_NAME \
|
||||
$DOCKER_NAME_TAG)
|
||||
|
||||
DOCKER_EXEC () {
|
||||
docker exec $DOCKER_ID bash -c "export PATH=$BASE_SCRATCH_DIR/bins/:\$PATH && cd $P_CI_DIR && $*"
|
||||
}
|
||||
export DOCKER_CI_CMD_PREFIX="docker exec $DOCKER_ID"
|
||||
else
|
||||
echo "Running on host system without docker wrapper"
|
||||
DOCKER_EXEC () {
|
||||
bash -c "export PATH=$BASE_SCRATCH_DIR/bins/:\$PATH && cd $P_CI_DIR && $*"
|
||||
}
|
||||
fi
|
||||
|
||||
DOCKER_EXEC () {
|
||||
$DOCKER_CI_CMD_PREFIX bash -c "export PATH=$BASE_SCRATCH_DIR/bins/:\$PATH && cd $P_CI_DIR && $*"
|
||||
}
|
||||
export -f DOCKER_EXEC
|
||||
|
||||
if [ -n "$DPKG_ADD_ARCH" ]; then
|
||||
|
|
|
@ -33,7 +33,9 @@ if [ -z "$NO_DEPENDS" ]; then
|
|||
else
|
||||
SHELL_OPTS="CONFIG_SHELL="
|
||||
fi
|
||||
DOCKER_EXEC $SHELL_OPTS make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS
|
||||
# Temporary workaround for https://github.com/bitcoin/bitcoin/issues/16368
|
||||
python3 -c 'import time; [print(".") or time.sleep(500) for _ in range(4)]' &
|
||||
( DOCKER_EXEC $SHELL_OPTS make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS ) &> /dev/null
|
||||
fi
|
||||
if [ -n "$PREVIOUS_RELEASES_TO_DOWNLOAD" ]; then
|
||||
BEGIN_FOLD previous-versions
|
||||
|
|
|
@ -1,6 +1,29 @@
|
|||
# ThreadSanitizer suppressions
|
||||
# ============================
|
||||
|
||||
# double locks (TODO fix)
|
||||
mutex:g_genesis_wait_mutex
|
||||
mutex:Interrupt
|
||||
mutex:CThreadInterrupt
|
||||
mutex:CConnman::Interrupt
|
||||
mutex:CConnman::WakeMessageHandler
|
||||
mutex:CConnman::ThreadOpenConnections
|
||||
mutex:CConnman::ThreadOpenAddedConnections
|
||||
mutex:CConnman::SocketHandler
|
||||
mutex:UpdateTip
|
||||
mutex:PeerLogicValidation::UpdatedBlockTip
|
||||
# race (TODO fix)
|
||||
race:CConnman::WakeMessageHandler
|
||||
race:CConnman::ThreadMessageHandler
|
||||
race:fHaveGenesis
|
||||
race:ProcessNewBlock
|
||||
race:ThreadImport
|
||||
race:zmq::*
|
||||
race:bitcoin-qt
|
||||
# deadlock (TODO fix)
|
||||
deadlock:CConnman::ForNode
|
||||
deadlock:UpdateTip
|
||||
|
||||
# WalletBatch (unidentified deadlock)
|
||||
deadlock:WalletBatch
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue