From f5fba25053411736771b5ff23ec7af721177e458 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Fri, 19 May 2023 16:31:11 +0000 Subject: [PATCH 01/10] ci: enforce glibc backwards compatibility on all builds without runtime sanitizers --- ci/test/00_setup_env_arm.sh | 2 +- ci/test/00_setup_env_i686_centos.sh | 2 +- ci/test/00_setup_env_native_cxx20.sh | 2 +- ci/test/00_setup_env_native_fuzz.sh | 2 +- ci/test/00_setup_env_native_nowallet.sh | 2 +- ci/test/00_setup_env_native_qt5.sh | 2 +- ci/test/00_setup_env_native_sqlite.sh | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ci/test/00_setup_env_arm.sh b/ci/test/00_setup_env_arm.sh index 743fbb955813..10d9be695f5e 100755 --- a/ci/test/00_setup_env_arm.sh +++ b/ci/test/00_setup_env_arm.sh @@ -26,4 +26,4 @@ export RUN_INTEGRATION_TESTS=false export GOAL="install" # -Wno-psabi is to disable ABI warnings: "note: parameter passing for argument of type ... changed in GCC 7.1" # This could be removed once the ABI change warning does not show up by default -export BITCOIN_CONFIG="--enable-reduce-exports --enable-suppress-external-warnings --enable-werror CXXFLAGS=-Wno-psabi" +export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports --enable-suppress-external-warnings --enable-werror CXXFLAGS=-Wno-psabi" diff --git a/ci/test/00_setup_env_i686_centos.sh b/ci/test/00_setup_env_i686_centos.sh index 210e15968b49..25e116d641fb 100644 --- a/ci/test/00_setup_env_i686_centos.sh +++ b/ci/test/00_setup_env_i686_centos.sh @@ -11,6 +11,6 @@ export CONTAINER_NAME=ci_i686_centos_7 export DOCKER_NAME_TAG=centos:7 export DOCKER_PACKAGES="gcc-c++ glibc-devel.x86_64 libstdc++-devel.x86_64 glibc-devel.i686 libstdc++-devel.i686 ccache libtool make git python3 python36-zmq which patch lbzip2 dash" export GOAL="install" -export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined" +export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-zmq --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined" export CONFIG_SHELL="/bin/dash" export PYZMQ=true diff --git a/ci/test/00_setup_env_native_cxx20.sh b/ci/test/00_setup_env_native_cxx20.sh index 6de18f16ee7b..3a970f89eddc 100755 --- a/ci/test/00_setup_env_native_cxx20.sh +++ b/ci/test/00_setup_env_native_cxx20.sh @@ -13,5 +13,5 @@ export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG" export PYZMQ=true export RUN_INTEGRATION_TESTS=false export GOAL="install" -export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks --enable-c++20 --enable-suppress-external-warnings --enable-werror" +export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-zmq --enable-reduce-exports --enable-crash-hooks --enable-c++20 --enable-suppress-external-warnings --enable-werror" diff --git a/ci/test/00_setup_env_native_fuzz.sh b/ci/test/00_setup_env_native_fuzz.sh index d552a9b91271..7aad5ca06b53 100755 --- a/ci/test/00_setup_env_native_fuzz.sh +++ b/ci/test/00_setup_env_native_fuzz.sh @@ -16,4 +16,4 @@ export RUN_UNIT_TESTS=false export RUN_INTEGRATION_TESTS=false export RUN_FUZZ_TESTS=true export GOAL="install" -export BITCOIN_CONFIG="--enable-zmq --disable-ccache --enable-fuzz --with-sanitizers=fuzzer,address,undefined --enable-c++17 CC=clang CXX=clang++" +export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-zmq --disable-ccache --enable-fuzz --with-sanitizers=fuzzer,address,undefined --enable-c++17 CC=clang CXX=clang++" diff --git a/ci/test/00_setup_env_native_nowallet.sh b/ci/test/00_setup_env_native_nowallet.sh index 832884f0de85..6bb371920ccc 100755 --- a/ci/test/00_setup_env_native_nowallet.sh +++ b/ci/test/00_setup_env_native_nowallet.sh @@ -10,4 +10,4 @@ export CONTAINER_NAME=ci_native_nowallet export PACKAGES="python3-zmq" export DEP_OPTS="NO_WALLET=1" export GOAL="install" -export BITCOIN_CONFIG="--enable-reduce-exports" +export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports" diff --git a/ci/test/00_setup_env_native_qt5.sh b/ci/test/00_setup_env_native_qt5.sh index 943fc494e209..38c9921a6bea 100755 --- a/ci/test/00_setup_env_native_qt5.sh +++ b/ci/test/00_setup_env_native_qt5.sh @@ -12,4 +12,4 @@ export DEP_OPTS="NO_UPNP=1 DEBUG=1" # TODO: we have few rpcs that aren't covered by any test, re-enable the line below once it's fixed # export TEST_RUNNER_EXTRA="--coverage --extended --exclude feature_pruning,feature_dbcrash" # Run extended tests so that coverage does not fail, but exclude the very slow dbcrash export GOAL="install" -export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++" +export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-zmq --enable-reduce-exports LDFLAGS=-static-libstdc++" diff --git a/ci/test/00_setup_env_native_sqlite.sh b/ci/test/00_setup_env_native_sqlite.sh index a455ada8712c..2b1bcdbc663b 100644 --- a/ci/test/00_setup_env_native_sqlite.sh +++ b/ci/test/00_setup_env_native_sqlite.sh @@ -10,4 +10,4 @@ export CONTAINER_NAME=ci_native_sqlite export PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools libdbus-1-dev libharfbuzz-dev" export DEP_OPTS="NO_BDB=1 NO_UPNP=1 DEBUG=1" export GOAL="install" -export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports --with-sqlite --without-bdb LDFLAGS=-static-libstdc++" +export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-zmq --enable-reduce-exports --with-sqlite --without-bdb LDFLAGS=-static-libstdc++" From a2c820c9f00c086426ae88c63d38670a31452801 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Fri, 19 May 2023 16:29:44 +0000 Subject: [PATCH 02/10] ci: skip symbol checks on runtime sanitizer-enabled builds TSan builds export all sorts of symbols that aren't part of the allowlist and report sanitizer failures when enabled with glibc compatibility enabled. The result of `check-symbols` is valuable but Bitcoin does not run them during their CI runs and for certain developer-oriented builds, it's proving to be more of an obstruction. It will still be enabled for all other builds and will prove to be important in backporting Guix pull requests, a finger on the pulse, but that doesn't apply to dev-oriented builds. --- ci/dash/build_src.sh | 5 ++++- ci/test/00_setup_env.sh | 1 + ci/test/00_setup_env_i686_ubsan.sh | 1 + ci/test/00_setup_env_native_tsan.sh | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ci/dash/build_src.sh b/ci/dash/build_src.sh index 9ee0860eefb4..d4dd37c55c5a 100755 --- a/ci/dash/build_src.sh +++ b/ci/dash/build_src.sh @@ -55,4 +55,7 @@ cd dashcore-$BUILD_TARGET ./configure --cache-file=../config.cache $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG || ( cat config.log && false) make $MAKEJOBS $GOAL || ( echo "Build failure. Verbose build follows." && make $GOAL V=1 ; false ) -make $MAKEJOBS -C src check-symbols + +if [ "$RUN_SYMBOL_TESTS" = "true" ]; then + make $MAKEJOBS -C src check-symbols +fi diff --git a/ci/test/00_setup_env.sh b/ci/test/00_setup_env.sh index 21fa373fcb06..e7b3dc43c745 100755 --- a/ci/test/00_setup_env.sh +++ b/ci/test/00_setup_env.sh @@ -39,6 +39,7 @@ export USE_BUSY_BOX=${USE_BUSY_BOX:-false} export RUN_UNIT_TESTS=${RUN_UNIT_TESTS:-true} export RUN_INTEGRATION_TESTS=${RUN_INTEGRATION_TESTS:-true} export RUN_FUZZ_TESTS=${RUN_FUZZ_TESTS:-false} +export RUN_SYMBOL_TESTS=${RUN_SYMBOL_TESTS:-true} export CONTAINER_NAME=${CONTAINER_NAME:-ci_unnamed} export DOCKER_NAME_TAG=${DOCKER_NAME_TAG:-ubuntu:focal} # Randomize test order. diff --git a/ci/test/00_setup_env_i686_ubsan.sh b/ci/test/00_setup_env_i686_ubsan.sh index 2c23666d21a0..9ee40d93c8ce 100755 --- a/ci/test/00_setup_env_i686_ubsan.sh +++ b/ci/test/00_setup_env_i686_ubsan.sh @@ -12,3 +12,4 @@ export GOAL="install" export BITCOIN_CONFIG="--enable-zmq --disable-bip70 --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined" export CONFIG_SHELL="/bin/dash" export PYZMQ=true +export RUN_SYMBOL_TESTS=false diff --git a/ci/test/00_setup_env_native_tsan.sh b/ci/test/00_setup_env_native_tsan.sh index 55bffa86e612..29c217bf806e 100755 --- a/ci/test/00_setup_env_native_tsan.sh +++ b/ci/test/00_setup_env_native_tsan.sh @@ -15,3 +15,4 @@ export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks export BITCOIN_CONFIG="${BITCOIN_CONFIG} CC=clang-15 CXX=clang++-15 CXXFLAGS=-Werror=thread-safety" export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_DASH_DEBUG -DARENA_DEBUG" export PYZMQ=true +export RUN_SYMBOL_TESTS=false From ca564f40f2c6bd0e6cc82614e12a4dbd166b0ead Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Wed, 31 May 2023 13:18:58 +0530 Subject: [PATCH 03/10] ci: drop i686 from GitLab CI runs --- .gitlab-ci.yml | 43 ----------------------------- .travis.yml | 14 ---------- ci/dash/matrix.sh | 4 --- ci/test/00_setup_env_i686_centos.sh | 16 ----------- ci/test/00_setup_env_i686_ubsan.sh | 15 ---------- 5 files changed, 92 deletions(-) delete mode 100644 ci/test/00_setup_env_i686_centos.sh delete mode 100755 ci/test/00_setup_env_i686_ubsan.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b78a3ef04043..dabbf0385d04 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -173,13 +173,6 @@ x86_64-w64-mingw32: variables: HOST: x86_64-w64-mingw32 -i686-pc-linux-gnu: - extends: - - .build-depends-template - - .skip-in-fast-mode-template - variables: - HOST: i686-pc-linux-gnu - x86_64-pc-linux-gnu-debug: extends: .build-depends-template variables: @@ -219,24 +212,6 @@ win64-build: variables: BUILD_TARGET: win64 -linux32-build: - extends: - - .build-template - - .skip-in-fast-mode-template - needs: - - i686-pc-linux-gnu - variables: - BUILD_TARGET: linux32 - -linux32_ubsan-build: - extends: - - .build-template - - .skip-in-fast-mode-template - needs: - - i686-pc-linux-gnu - variables: - BUILD_TARGET: linux32_ubsan - linux64-build: extends: .build-template needs: @@ -300,24 +275,6 @@ mac-build: ### -linux32-test: - extends: - - .test-template - - .skip-in-fast-mode-template - needs: - - linux32-build - variables: - BUILD_TARGET: linux32 - -linux32_ubsan-test: - extends: - - .test-template - - .skip-in-fast-mode-template - needs: - - linux32_ubsan-build - variables: - BUILD_TARGET: linux32_ubsan - linux64-test: extends: .test-template needs: diff --git a/.travis.yml b/.travis.yml index 26bb19160315..309b9cdbb051 100644 --- a/.travis.yml +++ b/.travis.yml @@ -97,9 +97,6 @@ jobs: - <<: *builddepends name: depends-win64 env: BUILD_TARGET=win64 - - <<: *builddepends - name: depends-linux32 - env: BUILD_TARGET=linux32 - <<: *builddepends name: depends-linux64 env: BUILD_TARGET=linux64 @@ -121,9 +118,6 @@ jobs: - <<: *buildsrc name: src-win64 env: BUILD_TARGET=win64 - - <<: *buildsrc - name: src-linux32 - env: BUILD_TARGET=linux32 - <<: *buildsrc name: src-linux64 env: BUILD_TARGET=linux64 @@ -142,9 +136,6 @@ jobs: - <<: *runtests name: tests-win64 env: BUILD_TARGET=win64 - - <<: *runtests - name: tests-linux32 - env: BUILD_TARGET=linux32 - <<: *runtests name: tests-linux64 env: BUILD_TARGET=linux64 @@ -233,11 +224,6 @@ after_success: env: >- FILE_ENV="./ci/test/00_setup_env_win64.sh" - - stage: test - name: '32-bit + dash [GOAL: install] [CentOS 7] [GUI]' - env: >- - FILE_ENV="./ci/test/00_setup_env_i686_centos.sh" - - stage: test name: 'x86_64 Linux [GOAL: install] [focal] [uses qt5 dev package instead of depends Qt to speed up build and avoid timeout] [unsigned char]' env: >- diff --git a/ci/dash/matrix.sh b/ci/dash/matrix.sh index 61b2559fe365..e6abf281e415 100755 --- a/ci/dash/matrix.sh +++ b/ci/dash/matrix.sh @@ -18,10 +18,6 @@ if [ "$BUILD_TARGET" = "arm-linux" ]; then source ./ci/test/00_setup_env_arm.sh elif [ "$BUILD_TARGET" = "win64" ]; then source ./ci/test/00_setup_env_win64.sh -elif [ "$BUILD_TARGET" = "linux32" ]; then - source ./ci/test/00_setup_env_i686_centos.sh -elif [ "$BUILD_TARGET" = "linux32_ubsan" ]; then - source ./ci/test/00_setup_env_i686_ubsan.sh elif [ "$BUILD_TARGET" = "linux64" ]; then source ./ci/test/00_setup_env_native_qt5.sh elif [ "$BUILD_TARGET" = "linux64_tsan" ]; then diff --git a/ci/test/00_setup_env_i686_centos.sh b/ci/test/00_setup_env_i686_centos.sh deleted file mode 100644 index 25e116d641fb..000000000000 --- a/ci/test/00_setup_env_i686_centos.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2020 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=i686-pc-linux-gnu -export CONTAINER_NAME=ci_i686_centos_7 -export DOCKER_NAME_TAG=centos:7 -export DOCKER_PACKAGES="gcc-c++ glibc-devel.x86_64 libstdc++-devel.x86_64 glibc-devel.i686 libstdc++-devel.i686 ccache libtool make git python3 python36-zmq which patch lbzip2 dash" -export GOAL="install" -export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-zmq --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined" -export CONFIG_SHELL="/bin/dash" -export PYZMQ=true diff --git a/ci/test/00_setup_env_i686_ubsan.sh b/ci/test/00_setup_env_i686_ubsan.sh deleted file mode 100755 index 9ee40d93c8ce..000000000000 --- a/ci/test/00_setup_env_i686_ubsan.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2019 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -export LC_ALL=C.UTF-8 - -export HOST=i686-pc-linux-gnu -export PACKAGES="g++-multilib python3-zmq" -export GOAL="install" -export BITCOIN_CONFIG="--enable-zmq --disable-bip70 --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined" -export CONFIG_SHELL="/bin/dash" -export PYZMQ=true -export RUN_SYMBOL_TESTS=false From 0b6ad252399d18fdf87371679a3ea41c292e28be Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Wed, 31 May 2023 13:28:35 +0530 Subject: [PATCH 04/10] ci: add substitute linux64 ubsan runner --- .gitlab-ci.yml | 18 ++++++++++++++++++ ci/dash/matrix.sh | 2 ++ ci/test/00_setup_env_native_ubsan.sh | 15 +++++++++++++++ 3 files changed, 35 insertions(+) create mode 100755 ci/test/00_setup_env_native_ubsan.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dabbf0385d04..8b27282451dd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -255,6 +255,15 @@ linux64_tsan-build: variables: BUILD_TARGET: linux64_tsan +linux64_ubsan-build: + extends: + - .build-template + - .skip-in-fast-mode-template + needs: + - x86_64-pc-linux-gnu-debug + variables: + BUILD_TARGET: linux64_ubsan + linux64_nowallet-build: extends: - .build-template @@ -299,3 +308,12 @@ linux64_tsan-test: - linux64_tsan-build variables: BUILD_TARGET: linux64_tsan + +linux64_ubsan-test: + extends: + - .test-template + - .skip-in-fast-mode-template + needs: + - linux64_ubsan-build + variables: + BUILD_TARGET: linux64_ubsan diff --git a/ci/dash/matrix.sh b/ci/dash/matrix.sh index e6abf281e415..3f8f35bc4b27 100755 --- a/ci/dash/matrix.sh +++ b/ci/dash/matrix.sh @@ -22,6 +22,8 @@ elif [ "$BUILD_TARGET" = "linux64" ]; then source ./ci/test/00_setup_env_native_qt5.sh elif [ "$BUILD_TARGET" = "linux64_tsan" ]; then source ./ci/test/00_setup_env_native_tsan.sh +elif [ "$BUILD_TARGET" = "linux64_ubsan" ]; then + source ./ci/test/00_setup_env_native_ubsan.sh elif [ "$BUILD_TARGET" = "linux64_fuzz" ]; then source ./ci/test/00_setup_env_native_fuzz.sh elif [ "$BUILD_TARGET" = "linux64_cxx20" ]; then diff --git a/ci/test/00_setup_env_native_ubsan.sh b/ci/test/00_setup_env_native_ubsan.sh new file mode 100755 index 000000000000..0976c6c08ab9 --- /dev/null +++ b/ci/test/00_setup_env_native_ubsan.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2019 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +export LC_ALL=C.UTF-8 + +export CONTAINER_NAME=ci_native_ubsan +export PACKAGES="clang-8 llvm-8 python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-filesystem-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev" +export DEP_OPTS="NO_UPNP=1 DEBUG=1" +export GOAL="install" +export BITCOIN_CONFIG="--enable-zmq --enable-reduce-exports --enable-crash-hooks --with-sanitizers=undefined" +export PYZMQ=true +export RUN_SYMBOL_TESTS=false From 8eab21bd331ff4132765154c713660a4ac01d7ca Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Fri, 19 May 2023 16:19:31 +0000 Subject: [PATCH 05/10] contrib: add symbols and libraries used by dash --- contrib/devtools/symbol-check.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py index aafdd8078939..3f7d30e488b3 100755 --- a/contrib/devtools/symbol-check.py +++ b/contrib/devtools/symbol-check.py @@ -54,6 +54,8 @@ IGNORE_EXPORTS = { '_edata', '_end', '__end__', '_init', '__bss_start', '__bss_start__', '_bss_end__', '__bss_end__', '_fini', '_IO_stdin_used', 'stdin', 'stdout', 'stderr', 'environ', '_environ', '__environ', +# Used in stacktraces.cpp +'__cxa_demangle' } CPPFILT_CMD = os.getenv('CPPFILT', '/usr/bin/c++filt') OBJDUMP_CMD = os.getenv('OBJDUMP', '/usr/bin/objdump') @@ -75,8 +77,10 @@ 'ld64.so.1', # POWER64 ABIv1 dynamic linker 'ld64.so.2', # POWER64 ABIv2 dynamic linker 'ld-linux-riscv64-lp64d.so.1', # 64-bit RISC-V dynamic linker +'libz.so.1', # zlib # dash-qt only 'libxcb.so.1', # part of X11 +'libxcb-shm.so.0', # X11 shared memory extension 'libxkbcommon.so.0', # keyboard keymapping 'libxkbcommon-x11.so.0', # keyboard keymapping 'libfontconfig.so.1', # font support From 207f047b1e11080508835b391990fcb43a29c82b Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Fri, 28 Aug 2020 11:09:58 +0200 Subject: [PATCH 06/10] partial bitcoin#17227: Add Android packaging support contains only changes made to configure.ac from ebfb10cb75adb704418d08197681c1e742e63bd5 --- configure.ac | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/configure.ac b/configure.ac index 9f7d7a35e5d6..5d4d3127f494 100644 --- a/configure.ac +++ b/configure.ac @@ -779,6 +779,21 @@ case $host in *android*) dnl make sure android stays above linux for hosts like *linux-android* TARGET_OS=android + case $host in + *x86_64*) + ANDROID_ARCH=x86_64 + ;; + *aarch64*) + ANDROID_ARCH=arm64-v8a + ;; + *armv7a*) + ANDROID_ARCH=armeabi-v7a + ;; + *i686*) + ANDROID_ARCH=i686 + ;; + *) AC_MSG_ERROR("Could not determine Android arch") ;; + esac ;; *linux*) TARGET_OS=linux @@ -1803,6 +1818,7 @@ AC_SUBST(HAVE_MM_PREFETCH) AC_SUBST(HAVE_STRONG_GETAUXVAL) AC_SUBST(HAVE_WEAK_GETAUXVAL) AC_SUBST(HAVE_GMTIME_R) +AC_SUBST(ANDROID_ARCH) AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini]) AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh]) AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/Doxyfile])]) From 458ed44d193d9184db874ab735f0f0f8deb63c3f Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Sun, 5 Dec 2021 00:27:55 +0200 Subject: [PATCH 07/10] merge bitcoin#23744: Drop support for i686-linux-android host --- configure.ac | 3 --- depends/README.md | 1 - depends/packages/qt.mk | 1 - 3 files changed, 5 deletions(-) diff --git a/configure.ac b/configure.ac index 5d4d3127f494..9260107e4308 100644 --- a/configure.ac +++ b/configure.ac @@ -789,9 +789,6 @@ case $host in *armv7a*) ANDROID_ARCH=armeabi-v7a ;; - *i686*) - ANDROID_ARCH=i686 - ;; *) AC_MSG_ERROR("Could not determine Android arch") ;; esac ;; diff --git a/depends/README.md b/depends/README.md index 47da59fac528..0e0b3da0cfd0 100644 --- a/depends/README.md +++ b/depends/README.md @@ -35,7 +35,6 @@ Common `host-platform-triplets` for cross compilation are: - `s390x-linux-gnu` for Linux S390X - `armv7a-linux-android` for Android ARM 32 bit - `aarch64-linux-android` for Android ARM 64 bit -- `i686-linux-android` for Android x86 32 bit - `x86_64-linux-android` for Android x86 64 bit The paths are automatically configured and no other options are needed unless targeting [Android](#Android). diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 7c64e8b65da7..ac66191045f6 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -185,7 +185,6 @@ $(package)_config_opts_android += -no-feature-vulkan $(package)_config_opts_aarch64_android += -android-arch arm64-v8a $(package)_config_opts_armv7a_android += -android-arch armeabi-v7a $(package)_config_opts_x86_64_android += -android-arch x86_64 -$(package)_config_opts_i686_android += -android-arch i686 endef define $(package)_fetch_cmds From 4c1a00e012568eb703135409894df161e598b8fa Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Tue, 22 Mar 2022 14:20:01 +0100 Subject: [PATCH 08/10] merge bitcoin#24639: Drop code for the unsupported i686-linux-gnu host --- contrib/guix/libexec/build.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index 46042be6c1ca..ce80a71a01b0 100644 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -164,7 +164,6 @@ case "$HOST" in *linux*) glibc_dynamic_linker=$( case "$HOST" in - i686-linux-gnu) echo /lib/ld-linux.so.2 ;; x86_64-linux-gnu) echo /lib64/ld-linux-x86-64.so.2 ;; arm-linux-gnueabihf) echo /lib/ld-linux-armhf.so.3 ;; aarch64-linux-gnu) echo /lib/ld-linux-aarch64.so.1 ;; @@ -201,19 +200,12 @@ make -C depends --jobs="$JOBS" HOST="$HOST" \ ${SOURCES_PATH+SOURCES_PATH="$SOURCES_PATH"} \ ${BASE_CACHE+BASE_CACHE="$BASE_CACHE"} \ ${SDK_PATH+SDK_PATH="$SDK_PATH"} \ - i686_linux_CC=i686-linux-gnu-gcc \ - i686_linux_CXX=i686-linux-gnu-g++ \ - i686_linux_AR=i686-linux-gnu-ar \ - i686_linux_RANLIB=i686-linux-gnu-ranlib \ - i686_linux_NM=i686-linux-gnu-nm \ - i686_linux_STRIP=i686-linux-gnu-strip \ x86_64_linux_CC=x86_64-linux-gnu-gcc \ x86_64_linux_CXX=x86_64-linux-gnu-g++ \ x86_64_linux_AR=x86_64-linux-gnu-ar \ x86_64_linux_RANLIB=x86_64-linux-gnu-ranlib \ x86_64_linux_NM=x86_64-linux-gnu-nm \ x86_64_linux_STRIP=x86_64-linux-gnu-strip \ - qt_config_opts_i686_linux='-platform linux-g++ -xplatform bitcoin-linux-g++' \ qt_config_opts_x86_64_linux='-platform linux-g++ -xplatform bitcoin-linux-g++' \ FORCE_USE_SYSTEM_CLANG=1 From 0fcc90cd3a9b6d4cb62bb62e14e654332493d944 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Mon, 29 May 2023 21:44:59 +0530 Subject: [PATCH 09/10] partial bitcoin#20963: Build binaries for 64-bit POWER excludes changes to gitian-linux that would make POWER64 a target platform for builds --- configure.ac | 5 +++++ contrib/gitian-descriptors/gitian-linux.yml | 6 +++--- contrib/gitian-descriptors/gitian-osx-signer.yml | 2 +- contrib/gitian-descriptors/gitian-osx.yml | 4 ++-- contrib/gitian-descriptors/gitian-win.yml | 6 +++--- src/compat/glibc_compat.cpp | 6 ++++++ 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index 9260107e4308..08c0452d23e6 100644 --- a/configure.ac +++ b/configure.ac @@ -869,6 +869,11 @@ AX_GCC_FUNC_ATTRIBUTE([dllimport]) if test x$use_glibc_compat != xno; then AX_CHECK_LINK_FLAG([[-Wl,--wrap=__divmoddi4]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=__divmoddi4"]) AX_CHECK_LINK_FLAG([[-Wl,--wrap=log2f]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=log2f"]) + case $host in + powerpc64* | ppc64*) + AX_CHECK_LINK_FLAG([[-Wl,--no-tls-get-addr-optimize]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--no-tls-get-addr-optimize"]) + ;; + esac AX_CHECK_LINK_FLAG([[-Wl,--wrap=log2]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=log2"]) AX_CHECK_LINK_FLAG([[-Wl,--wrap=log]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=log"]) AX_CHECK_LINK_FLAG([[-Wl,--wrap=pow]], [COMPAT_LDFLAGS="$COMPAT_LDFLAGS -Wl,--wrap=pow"]) diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index d8af2c9e52a1..4268a71bd73b 100755 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -85,7 +85,7 @@ script: | echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${prog} + echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${prog} chmod +x ${WRAP_DIR}/${prog} touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${prog} done @@ -101,7 +101,7 @@ script: | echo "REAL=\`which -a ${i}-${prog}-8 | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} - echo "\$REAL \"\$@\"" >> $WRAP_DIR/${i}-${prog} + echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${i}-${prog} chmod +x ${WRAP_DIR}/${i}-${prog} touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${i}-${prog} fi @@ -142,7 +142,7 @@ script: | # Extract the git archive into a dir for each host and build for i in ${HOSTS}; do export PATH=${BASEPREFIX}/${i}/native/bin:${ORIGPATH} - if [ "${i}" = "powerpc64-linux-gnu" ]; then + if [ "${i}" = "powerpc64-linux-gnu" ] || [ "${i}" = "powerpc64le-linux-gnu" ]; then # Workaround for https://bugs.launchpad.net/ubuntu/+source/gcc-8-cross-ports/+bug/1853740 # TODO: remove this when no longer needed HOST_LDFLAGS="${HOST_LDFLAGS_BASE} -Wl,-z,noexecstack" diff --git a/contrib/gitian-descriptors/gitian-osx-signer.yml b/contrib/gitian-descriptors/gitian-osx-signer.yml index 886d6553c092..6615e0369a26 100644 --- a/contrib/gitian-descriptors/gitian-osx-signer.yml +++ b/contrib/gitian-descriptors/gitian-osx-signer.yml @@ -31,7 +31,7 @@ script: | echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"${REFERENCE_DATETIME}\"" >> ${WRAP_DIR}/${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${prog} + echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${prog} chmod +x ${WRAP_DIR}/${prog} done diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml index 9ea53a8e3087..d130d8e550bc 100644 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -78,7 +78,7 @@ script: | echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${prog} + echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${prog} chmod +x ${WRAP_DIR}/${prog} touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${prog} done @@ -91,7 +91,7 @@ script: | echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog} + echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${i}-${prog} chmod +x ${WRAP_DIR}/${i}-${prog} touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${i}-${prog} done diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml index 393a18e4e185..99edd8077116 100755 --- a/contrib/gitian-descriptors/gitian-win.yml +++ b/contrib/gitian-descriptors/gitian-win.yml @@ -75,7 +75,7 @@ script: | echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${prog} + echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${prog} chmod +x ${WRAP_DIR}/${prog} touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${prog} done @@ -89,7 +89,7 @@ script: | echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} - echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog} + echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${i}-${prog} chmod +x ${WRAP_DIR}/${i}-${prog} touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${i}-${prog} done @@ -107,7 +107,7 @@ script: | echo "# $(${prog} --version | head -1)" >> ${WRAP_DIR}/${i}-${prog} echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} - echo "\$REAL \"\$@\"" >> $WRAP_DIR/${i}-${prog} + echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${i}-${prog} chmod +x ${WRAP_DIR}/${i}-${prog} touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${i}-${prog} done diff --git a/src/compat/glibc_compat.cpp b/src/compat/glibc_compat.cpp index 198b445071e2..029d48a858c3 100644 --- a/src/compat/glibc_compat.cpp +++ b/src/compat/glibc_compat.cpp @@ -55,6 +55,12 @@ extern "C" int fcntl_old(int fd, int cmd, ...); #define SYMVER "GLIBC_2.4" #elif defined(__aarch64__) #define SYMVER "GLIBC_2.17" +#elif defined(__powerpc64__) +# ifdef WORDS_BIGENDIAN +#define SYMVER "GLIBC_2.3" +# else +#define SYMVER "GLIBC_2.17" +# endif #elif defined(__riscv) #define SYMVER "GLIBC_2.27" #endif // __i386__ From 772ec4c5363e6ee88fbd03feeb9debe7b5c7125d Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Wed, 17 May 2023 06:34:13 +0000 Subject: [PATCH 10/10] merge bitcoin#22305: Avoid fcntl64@GLIBC_2.28 in libsqlite3.a --- contrib/devtools/symbol-check.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py index 3f7d30e488b3..136c122901f1 100755 --- a/contrib/devtools/symbol-check.py +++ b/contrib/devtools/symbol-check.py @@ -33,13 +33,19 @@ # - libc version 2.28 (http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/) # # See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html for more info. +# +# For 32-bit systems the minimum libc version is 2.28 to embrace new fcntl{64} symbols. +# It is safer than handling them in the glibc_compat.cpp due to their variadic arguments +# with possible different sizes. +# See: https://stackoverflow.com/a/58472959 +# MAX_VERSIONS = { 'GCC': (4,8,0), 'GLIBC': { - pixie.EM_386: (2,18), + pixie.EM_386: (2,28), pixie.EM_X86_64: (2,18), - pixie.EM_ARM: (2,18), + pixie.EM_ARM: (2,28), pixie.EM_AARCH64:(2,18), pixie.EM_PPC64: (2,18), pixie.EM_RISCV: (2,27),