diff --git a/.cirrus.yml b/.cirrus.yml
index 393237af66b..6e70dc15fec 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -158,7 +158,7 @@ task:
FILE_ENV: "./ci/test/00_setup_env_native_previous_releases.sh"
task:
- name: 'TSan, depends, gui'
+ name: 'TSan, depends, no gui'
<< : *GLOBAL_TASK_TEMPLATE
persistent_worker:
labels:
diff --git a/ci/test/00_setup_env_native_asan.sh b/ci/test/00_setup_env_native_asan.sh
index ead550a43ce..dbfcc259d66 100755
--- a/ci/test/00_setup_env_native_asan.sh
+++ b/ci/test/00_setup_env_native_asan.sh
@@ -19,15 +19,15 @@ else
fi
export CONTAINER_NAME=ci_native_asan
-export APT_LLVM_V="20"
+export APT_LLVM_V="21"
export PACKAGES="systemtap-sdt-dev clang-${APT_LLVM_V} llvm-${APT_LLVM_V} libclang-rt-${APT_LLVM_V}-dev python3-zmq qtbase5-dev qttools5-dev qttools5-dev-tools libevent-dev libboost-dev libdb5.3++-dev libzmq3-dev libqrencode-dev libsqlite3-dev ${BPFCC_PACKAGE}"
export NO_DEPENDS=1
export GOAL="install"
export BITCOIN_CONFIG="\
-DWITH_USDT=ON -DWITH_ZMQ=ON -DWITH_BDB=ON -DWARN_INCOMPATIBLE_BDB=OFF -DBUILD_GUI=ON \
-DSANITIZERS=address,float-divide-by-zero,integer,undefined \
- -DCMAKE_C_COMPILER=clang-${APT_LLVM_V} \
- -DCMAKE_CXX_COMPILER=clang++-${APT_LLVM_V} \
+ -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_FLAGS='-ftrivial-auto-var-init=pattern' \
-DCMAKE_CXX_FLAGS='-ftrivial-auto-var-init=pattern -Wno-error=deprecated-declarations' \
-DAPPEND_CXXFLAGS='-std=c++23' \
diff --git a/ci/test/00_setup_env_native_fuzz.sh b/ci/test/00_setup_env_native_fuzz.sh
index c5220211fc5..d81cbcf228f 100755
--- a/ci/test/00_setup_env_native_fuzz.sh
+++ b/ci/test/00_setup_env_native_fuzz.sh
@@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8
export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
export CONTAINER_NAME=ci_native_fuzz
-export APT_LLVM_V="20"
+export APT_LLVM_V="21"
export PACKAGES="clang-${APT_LLVM_V} llvm-${APT_LLVM_V} libclang-rt-${APT_LLVM_V}-dev libevent-dev libboost-dev libsqlite3-dev"
export NO_DEPENDS=1
export RUN_UNIT_TESTS=false
@@ -19,9 +19,8 @@ export CI_CONTAINER_CAP="--cap-add SYS_PTRACE" # If run with (ASan + LSan), the
export BITCOIN_CONFIG="\
-DBUILD_FOR_FUZZING=ON \
-DSANITIZERS=fuzzer,address,undefined,float-divide-by-zero,integer \
- -DCMAKE_C_COMPILER=clang-${APT_LLVM_V} \
- -DCMAKE_CXX_COMPILER=clang++-${APT_LLVM_V} \
+ -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_FLAGS='-ftrivial-auto-var-init=pattern' \
-DCMAKE_CXX_FLAGS='-ftrivial-auto-var-init=pattern' \
"
-export LLVM_SYMBOLIZER_PATH="/usr/bin/llvm-symbolizer-${APT_LLVM_V}"
diff --git a/ci/test/00_setup_env_native_fuzz_with_msan.sh b/ci/test/00_setup_env_native_fuzz_with_msan.sh
index a6e53dc8a2f..27b704017c4 100755
--- a/ci/test/00_setup_env_native_fuzz_with_msan.sh
+++ b/ci/test/00_setup_env_native_fuzz_with_msan.sh
@@ -7,7 +7,7 @@
export LC_ALL=C.UTF-8
export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
-LIBCXX_DIR="/msan/cxx_build/"
+LIBCXX_DIR="/cxx_build/"
export MSAN_FLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1 -fno-optimize-sibling-calls"
LIBCXX_FLAGS="-nostdinc++ -nostdlib++ -isystem ${LIBCXX_DIR}include/c++/v1 -L${LIBCXX_DIR}lib -Wl,-rpath,${LIBCXX_DIR}lib -lc++ -lc++abi -lpthread -Wno-unused-command-line-argument"
export MSAN_AND_LIBCXX_FLAGS="${MSAN_FLAGS} ${LIBCXX_FLAGS}"
@@ -27,7 +27,7 @@ export BITCOIN_CONFIG="\
-DSANITIZERS=fuzzer,memory \
-DAPPEND_CPPFLAGS='-DBOOST_MULTI_INDEX_ENABLE_SAFE_MODE -U_FORTIFY_SOURCE' \
"
-export USE_MEMORY_SANITIZER="true"
+export USE_INSTRUMENTED_LIBCPP="MemoryWithOrigins"
export RUN_UNIT_TESTS="false"
export RUN_FUNCTIONAL_TESTS="false"
export RUN_FUZZ_TESTS=true
diff --git a/ci/test/00_setup_env_native_msan.sh b/ci/test/00_setup_env_native_msan.sh
index 8784aaa5b7b..879e82d55a4 100755
--- a/ci/test/00_setup_env_native_msan.sh
+++ b/ci/test/00_setup_env_native_msan.sh
@@ -7,13 +7,14 @@
export LC_ALL=C.UTF-8
export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
-LIBCXX_DIR="/msan/cxx_build/"
+export APT_LLVM_V="21"
+LIBCXX_DIR="/cxx_build/"
export MSAN_FLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1 -fno-optimize-sibling-calls"
LIBCXX_FLAGS="-nostdinc++ -nostdlib++ -isystem ${LIBCXX_DIR}include/c++/v1 -L${LIBCXX_DIR}lib -Wl,-rpath,${LIBCXX_DIR}lib -lc++ -lc++abi -lpthread -Wno-unused-command-line-argument"
export MSAN_AND_LIBCXX_FLAGS="${MSAN_FLAGS} ${LIBCXX_FLAGS}"
export CONTAINER_NAME="ci_native_msan"
-export PACKAGES="ninja-build"
+export PACKAGES="clang-${APT_LLVM_V} llvm-${APT_LLVM_V} llvm-${APT_LLVM_V}-dev libclang-${APT_LLVM_V}-dev libclang-rt-${APT_LLVM_V}-dev ninja-build"
# BDB generates false-positives and will be removed in future
export DEP_OPTS="DEBUG=1 NO_BDB=1 NO_QT=1 CC=clang CXX=clang++ CFLAGS='${MSAN_FLAGS}' CXXFLAGS='${MSAN_AND_LIBCXX_FLAGS}'"
export GOAL="install"
@@ -26,4 +27,4 @@ export BITCOIN_CONFIG="\
-DSANITIZERS=memory \
-DAPPEND_CPPFLAGS='-U_FORTIFY_SOURCE' \
"
-export USE_MEMORY_SANITIZER="true"
+export USE_INSTRUMENTED_LIBCPP="MemoryWithOrigins"
diff --git a/ci/test/00_setup_env_native_tsan.sh b/ci/test/00_setup_env_native_tsan.sh
index b341adfec53..6286e39d842 100755
--- a/ci/test/00_setup_env_native_tsan.sh
+++ b/ci/test/00_setup_env_native_tsan.sh
@@ -8,9 +8,12 @@ export LC_ALL=C.UTF-8
export CONTAINER_NAME=ci_native_tsan
export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
-export APT_LLVM_V="20"
-export PACKAGES="clang-${APT_LLVM_V} llvm-${APT_LLVM_V} libclang-rt-${APT_LLVM_V}-dev libc++abi-${APT_LLVM_V}-dev libc++-${APT_LLVM_V}-dev python3-zmq"
-export DEP_OPTS="CC=clang-${APT_LLVM_V} CXX='clang++-${APT_LLVM_V} -stdlib=libc++'"
+export APT_LLVM_V="21"
+LIBCXX_DIR="/cxx_build/"
+LIBCXX_FLAGS="-fsanitize=thread -nostdinc++ -nostdlib++ -isystem ${LIBCXX_DIR}include/c++/v1 -L${LIBCXX_DIR}lib -Wl,-rpath,${LIBCXX_DIR}lib -lc++ -lc++abi -lpthread -Wno-unused-command-line-argument"
+export PACKAGES="clang-${APT_LLVM_V} llvm-${APT_LLVM_V} llvm-${APT_LLVM_V}-dev libclang-${APT_LLVM_V}-dev libclang-rt-${APT_LLVM_V}-dev python3-zmq ninja-build"
+export DEP_OPTS="CC=clang CXX=clang++ CXXFLAGS='${LIBCXX_FLAGS}' NO_QT=1"
export GOAL="install"
export BITCOIN_CONFIG="-DWITH_ZMQ=ON -DSANITIZERS=thread \
--DAPPEND_CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER -DDEBUG_LOCKCONTENTION -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES'"
+-DAPPEND_CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKCONTENTION -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES'"
+export USE_INSTRUMENTED_LIBCPP="Thread"
diff --git a/ci/test/01_base_install.sh b/ci/test/01_base_install.sh
index 1344563268f..25a03d5f503 100755
--- a/ci/test/01_base_install.sh
+++ b/ci/test/01_base_install.sh
@@ -43,32 +43,42 @@ elif [ "$CI_OS_NAME" != "macos" ]; then
${CI_RETRY_EXE} bash -c "apt-get install --no-install-recommends --no-upgrade -y $PACKAGES $CI_BASE_PACKAGES"
fi
+if [ -n "${APT_LLVM_V}" ]; then
+ update-alternatives --install /usr/bin/clang++ clang++ "/usr/bin/clang++-${APT_LLVM_V}" 100
+ update-alternatives --install /usr/bin/clang clang "/usr/bin/clang-${APT_LLVM_V}" 100
+ update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer "/usr/bin/llvm-symbolizer-${APT_LLVM_V}" 100
+fi
+
if [ -n "$PIP_PACKAGES" ]; then
# shellcheck disable=SC2086
${CI_RETRY_EXE} pip3 install --user $PIP_PACKAGES
fi
-if [[ ${USE_MEMORY_SANITIZER} == "true" ]]; then
- ${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-20.1.0" /msan/llvm-project
+if [[ -n "${USE_INSTRUMENTED_LIBCPP}" ]]; then
+ if [ -n "${APT_LLVM_V}" ]; then
+ ${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-$( clang --version | sed --silent 's@.*clang version \([0-9.]*\).*@\1@p' )" /llvm-project
+ else
+ ${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-21.1.0" /llvm-project
- cmake -G Ninja -B /msan/clang_build/ \
- -DLLVM_ENABLE_PROJECTS="clang" \
- -DCMAKE_BUILD_TYPE=Release \
- -DLLVM_TARGETS_TO_BUILD=Native \
- -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" \
- -S /msan/llvm-project/llvm
+ cmake -G Ninja -B /clang_build/ \
+ -DLLVM_ENABLE_PROJECTS="clang" \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DLLVM_TARGETS_TO_BUILD=Native \
+ -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" \
+ -S /llvm-project/llvm
- ninja -C /msan/clang_build/ "$MAKEJOBS"
- ninja -C /msan/clang_build/ install-runtimes
+ ninja -C /clang_build/ "$MAKEJOBS"
+ ninja -C /clang_build/ install-runtimes
- update-alternatives --install /usr/bin/clang++ clang++ /msan/clang_build/bin/clang++ 100
- update-alternatives --install /usr/bin/clang clang /msan/clang_build/bin/clang 100
- update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer /msan/clang_build/bin/llvm-symbolizer 100
+ update-alternatives --install /usr/bin/clang++ clang++ /clang_build/bin/clang++ 100
+ update-alternatives --install /usr/bin/clang clang /clang_build/bin/clang 100
+ update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer /clang_build/bin/llvm-symbolizer 100
+ fi
- cmake -G Ninja -B /msan/cxx_build/ \
+ cmake -G Ninja -B /cxx_build/ \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
-DCMAKE_BUILD_TYPE=Release \
- -DLLVM_USE_SANITIZER=MemoryWithOrigins \
+ -DLLVM_USE_SANITIZER="${USE_INSTRUMENTED_LIBCPP}" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DLLVM_TARGETS_TO_BUILD=Native \
@@ -76,13 +86,13 @@ if [[ ${USE_MEMORY_SANITIZER} == "true" ]]; then
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
-DLIBCXX_ABI_DEFINES="_LIBCPP_ABI_BOUNDED_ITERATORS;_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY;_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING;_LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR;_LIBCPP_ABI_BOUNDED_UNIQUE_PTR" \
-DLIBCXX_HARDENING_MODE=debug \
- -S /msan/llvm-project/runtimes
+ -S /llvm-project/runtimes
- ninja -C /msan/cxx_build/ "$MAKEJOBS"
+ ninja -C /cxx_build/ "$MAKEJOBS"
# Clear no longer needed source folder
- du -sh /msan/llvm-project
- rm -rf /msan/llvm-project
+ du -sh /llvm-project
+ rm -rf /llvm-project
fi
if [[ "${RUN_TIDY}" == "true" ]]; then
diff --git a/doc/release-notes.md b/doc/release-notes.md
index 923d34a99bb..b73e52dc570 100644
--- a/doc/release-notes.md
+++ b/doc/release-notes.md
@@ -1,6 +1,6 @@
-Bitcoin Core version 29.1 is now available from:
+Bitcoin Core version 29.x is now available from:
-
+
This release includes various bug fixes and performance
improvements, as well as updated translations.
@@ -37,192 +37,19 @@ unsupported systems.
Notable changes
===============
-### Mempool Policy
-
-- The maximum number of potentially executed legacy signature operations in a
- single standard transaction is now limited to 2500. Signature operations in all
- previous output scripts, in all input scripts, as well as all P2SH redeem
- scripts (if there are any) are counted toward the limit. The new limit is
- assumed to not affect any known typically formed standard transactions. The
- change was done to prepare for a possible BIP54 deployment in the future.
-
-- #32521 policy: make pathological transactions packed with legacy sigops non-standard
-
-- The minimum block feerate (`-blockmintxfee`) has been changed to 1 satoshi per kvB. It can still be changed using the
-configuration option.
-
-- The default minimum relay feerate (`-minrelaytxfee`) and incremental relay feerate (`-incrementalrelayfee`) have been
-changed to 100 satoshis per kvB. They can still be changed using their respective configuration options, but it is
-recommended to change both together if you decide to do so.
- - Other minimum feerates (e.g. the dust feerate, the minimum returned by the fee estimator, and all feerates used by
- the wallet) remain unchanged. The mempool minimum feerate still changes in response to high volume.
- - Note that unless these lower defaults are widely adopted across the network, transactions created with lower fee
- rates are not guaranteed to propagate or confirm. The wallet feerates remain unchanged; `-mintxfee` must be changed
- before attempting to create transactions with lower feerates using the wallet.
-
-- #33106 policy: lower the default blockmintxfee, incrementalrelayfee, minrelaytxfee
-
-### Logging
-
-Unconditional logging to disk is now rate limited by giving each source location
-a quota of 1MiB per hour. Unconditional logging is any logging with a log level
-higher than debug, that is `info`, `warning`, and `error`. All logs will be
-prefixed with `[*]` if there is at least one source location that is currently
-being suppressed. (#32604)
-
-When `-logsourcelocations` is enabled, the log output now contains the entire
-function signature instead of just the function name. (#32604)
-
-### RPC
-
-- The `dumptxoutset` RPC now requires a `type` parameter to be specified. To maintain pre
- v29.0 behavior, use the `latest` parameter. Documenting this change was missed in the v29.0
- release notes. (#30808)
-
-### Updated Settings
-
-- The `-maxmempool` and `-dbcache` startup parameters are now capped on
- 32-bit systems to 500MB and 1GiB respectively.
-
-- #32530 node: cap -maxmempool and -dbcache values for 32-bit
-
-### Wallet
-
-- #31757 wallet: fix crash on double block disconnection
-- #32553 wallet: Fix logging of wallet version
-
-### P2P
-
-- #32826 p2p: add more bad ports
-
-### Test
-
-- #32069 test: fix intermittent failure in wallet_reorgsrestore.py
-- #32286 test: Handle empty string returned by CLI as None in RPC tests
-- #32312 test: Fix feature_pruning test after nTime typo fix
-- #32336 test: Suppress upstream -Wduplicate-decl-specifier in bpfcc
-- #32463 test: fix an incorrect feature_fee_estimation.py subtest
-- #32483 test: fix two intermittent failures in wallet_basic.py
-- #32630 test: fix sync function in rpc_psbt.py
-- #32765 test: Fix list index out of range error in feature_bip68_sequence.py
-- #32742 test: fix catchup loop in outbound eviction functional test
-- #32823 test: Fix wait_for_getheaders() call in test_outbound_eviction_blocks_relay_only()
-- #32833 test: Add msgtype to msg_generic slots
-- #32841 feature_taproot: sample tx version border values more
-- #32850 test: check P2SH sigop count for coinbase tx
-- #32859 test: correctly detect nonstd TRUC tx vsize in feature_taproot
-- #33001 test: Do not pass tests on unhandled exceptions
-
-### Indexes
-
-- #33212 index: Don't commit state in BaseIndex::Rewind
-
-### Util
-
-- #32248 Remove support for RNDR/RNDRRS for aarch64
-
-### Build
-
-- #32356 cmake: Respect user-provided configuration-specific flags
-- #32437 crypto: disable ASan for sha256_sse4 with Clang
-- #32469 cmake: Allow WITH_DBUS on all Unix-like systems
-- #32439 guix: accomodate migration to codeberg
-- #32551 cmake: Add missed SSE41_CXXFLAGS
-- #32568 depends: use "mkdir -p" when installing xproto
-- #32678 guix: warn and abort when SOURCE_DATE_EPOCH is set
-- #32690 depends: fix SHA256SUM command on OpenBSD (use GNU mode output)
-- #32716 depends: Override host compilers for FreeBSD and OpenBSD
-- #32760 depends: capnp 1.2.0
-- #32798 build: add root dir to CMAKE_PREFIX_PATH in toolchain
-- #32805 cmake: Use HINTS instead of PATHS in find_* commands
-- #32814 cmake: Explicitly specify Boost_ROOT for Homebrew's package
-- #32837 depends: fix libevent _WIN32_WINNT usage
-- #32943 depends: Force CMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE
-- #32954 cmake: Drop no longer necessary "cmakeMinimumRequired" object
-- #33073 guix: warn SOURCE_DATE_EPOCH set in guix-codesign
-
-### Gui
-
-- #864 Crash fix, disconnect numBlocksChanged() signal during shutdown
-- #868 Replace stray tfm::format to cerr with qWarning
-
-### Doc
-
-- #32333 doc: Add missing top-level description to pruneblockchain RPC
-- #32353 doc: Fix fuzz test_runner.py path
-- #32389 doc: Fix test_bitcoin path
-- #32607 rpc: Note in fundrawtransaction doc, fee rate is for package
-- #32679 doc: update tor docs to use bitcoind binary from path
-- #32693 depends: fix cmake compatibility error for freetype
-- #32696 doc: make -DWITH_ZMQ=ON explicit on build-unix.md
-- #32708 rpc, doc: update listdescriptors RCP help
-- #32711 doc: add missing packages for BSDs (cmake, gmake, curl) to depends/README.md
-- #32719 doc, windows: CompanyName "Bitcoin" => "Bitcoin Core project"
-- #32776 doc: taproot became always active in v24.0
-- #32777 doc: fix Transifex 404s
-- #32846 doc: clarify that the "-j N" goes after the "--build build" part
-- #32858 doc: Add workaround for vcpkg issue with paths with embedded spaces
-- #33070 doc/zmq: fix unix socket path example
-- #33088 doc: move cmake -B build -LH up in Unix build docs
-- #33133 rpc: fix getpeerinfo ping duration unit docs
-- #33119 rpc: Fix 'getdescriptoractivity' RPCHelpMan, add test to verify fix
-- #33236 doc: Remove wrong and redundant doxygen tag
-
### CI
-- #32184 ci: Add workaround for vcpkg's libevent package
-- #33261 ci: return to using dash in CentOS job
-
-### Misc
-
-- #32187 refactor: Remove spurious virtual from final ~CZMQNotificationInterface
-- #32454 tracing: fix invalid argument in mempool_monitor
-- #32771 contrib: tracing: Fix read of pmsg_type in p2p_monitor.py
-- #33086 contrib: [tracing] fix pointer argument handling in mempool_monitor.py
+- #32999 ci: Use APT_LLVM_V in msan task
+- #33099 ci: allow for any libc++ intrumentation & use it for TSAN
+- #33258 ci: use LLVM 21
Credits
=======
Thanks to everyone who directly contributed to this release:
-- 0xB10C
-- achow101
-- Antoine Poinsot
-- benthecarman
-- bigspider
-- Brandon Odiwuor
-- brunoerg
-- Bufo
-- Christewart
-- Crypt-iQ
-- davidgumberg
-- deadmanoz
-- dergoegge
-- enirox001
- fanquake
-- furszy
-- glozow
-- instagibbs
-- Hennadii Stepanov
-- hodlinator
-- ismaelsadeeq
-- jb55
-- jlopp
-- josibake
-- laanwj
-- luisschwab
- MarcoFalke
-- Martin Zumsande
-- monlovesmango
-- nervana21
-- pablomartin4btc
-- rkrux
-- romanz
-- ryanofsky
-- Sjors
-- theStack
-- willcl-ark
-- zaidmstrr
As well as to everyone that helped with translations on
[Transifex](https://explore.transifex.com/bitcoin/bitcoin/).