Skip to content

Commit fee01bb

Browse files
author
MarcoFalke
committed
Merge bitcoin#17517: ci: Bump to clang-8 for asan build to avoid segfaults on ppc64le
fa40e48 ci: Remove unparseable lines from supp file for old xenial clang tsan (MarcoFalke) fa1bfc4 ci: ubsan report_error_type=1 and add suppressions (MarcoFalke) fa69cef test: Print stderr when subprocess fails (MarcoFalke) 2222c30 test: Use char instead of unsigned char (MarcoFalke) faa8023 ci: Bump to clang-8 for asan build to avoid segfaults on ppc64le (MarcoFalke) Pull request description: Use clang-8 instead of default clang (which is clang-6 on Bionic) to avoid spurious segfaults when running the ci system on ppc64le ACKs for top commit: practicalswift: ACK fa40e48 assuming Travis is happy -- diff looks correct :) Tree-SHA512: f4f26232d3a0ef38da245869340f723d279a3db9823befbc735fb5a00024dae041c7306d7ae55d2488e6f86aa96cdea155b007aefb561fba505141e8dbc717dc
2 parents 4191963 + fa40e48 commit fee01bb

File tree

7 files changed

+68
-16
lines changed

7 files changed

+68
-16
lines changed

ci/test/00_setup_env.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66

77
export LC_ALL=C.UTF-8
88

9+
# The root dir.
10+
# The ci system copies this folder.
11+
# This is where the build is done (depends and dist).
12+
BASE_ROOT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../../ >/dev/null 2>&1 && pwd )
13+
export BASE_ROOT_DIR
14+
915
echo "Setting specific values in env"
1016
if [ -n "${FILE_ENV}" ]; then
1117
set -o errexit;
1218
# shellcheck disable=SC1090
1319
source "${FILE_ENV}"
1420
fi
1521

16-
# The root dir.
17-
# The ci system copies this folder.
18-
# This is where the build is done (depends and dist).
19-
BASE_ROOT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../../ >/dev/null 2>&1 && pwd )
20-
export BASE_ROOT_DIR
21-
2222
echo "Fallback to default values in env (if not yet set)"
2323
# The number of parallel jobs to pass down to make and test_runner.py
2424
export MAKEJOBS=${MAKEJOBS:--j4}

ci/test/00_setup_env_native_asan.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66

77
export LC_ALL=C.UTF-8
88

9-
export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev"
9+
export PACKAGES="clang-8 llvm-8 python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev"
10+
# Use clang-8 instead of default clang (which is clang-6 on Bionic) to avoid spurious segfaults when running on ppc64le
1011
export NO_DEPENDS=1
1112
export GOAL="install"
12-
export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=address,integer,undefined CC=clang CXX=clang++"
13+
export BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=address,integer,undefined CC=clang-8 CXX=clang++-8"

ci/test/00_setup_env_native_tsan.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ export PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libevent-
1111
export NO_DEPENDS=1
1212
export GOAL="install"
1313
export BITCOIN_CONFIG="--enable-zmq --disable-wallet --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=thread --disable-hardening --disable-asm CC=clang CXX=clang++"
14+
15+
# xenial comes with old clang versions that can not parse the sanitizer suppressions files
16+
# Remove unparseable lines as a hacky workaround
17+
sed -i '/^implicit-/d' "${BASE_ROOT_DIR}/test/sanitizer_suppressions/ubsan"

ci/test/04_install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ mkdir -p "${CCACHE_DIR}"
3636
export ASAN_OPTIONS="detect_stack_use_after_return=1"
3737
export LSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/lsan"
3838
export TSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/tsan:log_path=${BASE_SCRATCH_DIR}/sanitizer-output/tsan"
39-
export UBSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1"
39+
export UBSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1:report_error_type=1"
4040
env | grep -E '^(BITCOIN_CONFIG|CCACHE_|WINEDEBUG|LC_ALL|BOOST_TEST_RANDOM|CONFIG_SHELL|(ASAN|LSAN|TSAN|UBSAN)_OPTIONS)' | tee /tmp/env
4141
if [[ $HOST = *-mingw32 ]]; then
4242
DOCKER_ADMIN="--cap-add SYS_ADMIN"

src/test/crypto_tests.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,14 +186,15 @@ static void TestHKDF_SHA256_32(const std::string &ikm_hex, const std::string &sa
186186
BOOST_CHECK(HexStr(out, out + 32) == okm_check_hex);
187187
}
188188

189-
static std::string LongTestString() {
189+
static std::string LongTestString()
190+
{
190191
std::string ret;
191-
for (int i=0; i<200000; i++) {
192-
ret += (unsigned char)(i);
193-
ret += (unsigned char)(i >> 4);
194-
ret += (unsigned char)(i >> 8);
195-
ret += (unsigned char)(i >> 12);
196-
ret += (unsigned char)(i >> 16);
192+
for (int i = 0; i < 200000; i++) {
193+
ret += (char)(i);
194+
ret += (char)(i >> 4);
195+
ret += (char)(i >> 8);
196+
ret += (char)(i >> 12);
197+
ret += (char)(i >> 16);
197198
}
198199
return ret;
199200
}

test/functional/test_framework/test_framework.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import pdb
1313
import random
1414
import shutil
15+
import subprocess
1516
import sys
1617
import tempfile
1718
import time
@@ -121,6 +122,9 @@ def main(self):
121122
except KeyError:
122123
self.log.exception("Key error")
123124
self.success = TestStatus.FAILED
125+
except subprocess.CalledProcessError as e:
126+
self.log.exception("Called Process failed with '{}'".format(e.output))
127+
self.success = TestStatus.FAILED
124128
except Exception:
125129
self.log.exception("Unexpected exception caught during testing")
126130
self.success = TestStatus.FAILED

test/sanitizer_suppressions/ubsan

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,45 @@ unsigned-integer-overflow:stl_bvector.h
4242
unsigned-integer-overflow:txmempool.cpp
4343
unsigned-integer-overflow:util/strencodings.cpp
4444
unsigned-integer-overflow:validation.cpp
45+
46+
implicit-integer-sign-change:*/include/c++/*/bits/*.h
47+
implicit-integer-sign-change:*/new_allocator.h
48+
implicit-integer-sign-change:/usr/include/boost/date_time/format_date_parser.hpp
49+
implicit-integer-sign-change:arith_uint256.cpp
50+
implicit-integer-sign-change:bech32.cpp
51+
implicit-integer-sign-change:bloom.cpp
52+
implicit-integer-sign-change:chain.*
53+
implicit-integer-sign-change:coins.h
54+
implicit-integer-sign-change:compat/stdin.cpp
55+
implicit-integer-sign-change:compressor.h
56+
implicit-integer-sign-change:crypto/*
57+
implicit-integer-sign-change:key.cpp
58+
implicit-integer-sign-change:noui.cpp
59+
implicit-integer-sign-change:prevector.h
60+
implicit-integer-sign-change:protocol.cpp
61+
implicit-integer-sign-change:script/bitcoinconsensus.cpp
62+
implicit-integer-sign-change:script/interpreter.cpp
63+
implicit-integer-sign-change:serialize.h
64+
implicit-integer-sign-change:test/arith_uint256_tests.cpp
65+
implicit-integer-sign-change:test/coins_tests.cpp
66+
implicit-integer-sign-change:test/pow_tests.cpp
67+
implicit-integer-sign-change:test/prevector_tests.cpp
68+
implicit-integer-sign-change:test/sighash_tests.cpp
69+
implicit-integer-sign-change:test/streams_tests.cpp
70+
implicit-integer-sign-change:test/transaction_tests.cpp
71+
implicit-integer-sign-change:txmempool.cpp
72+
implicit-integer-sign-change:util/strencodings.*
73+
implicit-integer-sign-change:validation.cpp
74+
implicit-integer-sign-change:zmq/zmqpublishnotifier.cpp
75+
implicit-signed-integer-truncation,implicit-integer-sign-change:chain.h
76+
implicit-signed-integer-truncation,implicit-integer-sign-change:test/skiplist_tests.cpp
77+
implicit-signed-integer-truncation:chain.h
78+
implicit-signed-integer-truncation:crypto/*
79+
implicit-signed-integer-truncation:cuckoocache.h
80+
implicit-signed-integer-truncation:leveldb/*
81+
implicit-signed-integer-truncation:streams.h
82+
implicit-signed-integer-truncation:test/arith_uint256_tests.cpp
83+
implicit-signed-integer-truncation:test/skiplist_tests.cpp
84+
implicit-signed-integer-truncation:torcontrol.cpp
85+
implicit-unsigned-integer-truncation:crypto/*
86+
implicit-unsigned-integer-truncation:leveldb/*

0 commit comments

Comments
 (0)