diff --git a/ci/test/00_setup_env_native_tsan.sh b/ci/test/00_setup_env_native_tsan.sh index f84f594735f6..9a7f15cf8b44 100755 --- a/ci/test/00_setup_env_native_tsan.sh +++ b/ci/test/00_setup_env_native_tsan.sh @@ -30,6 +30,6 @@ export DEP_OPTS="CC=clang-19 CXX='clang++-19 -stdlib=libc++'" export TEST_RUNNER_EXTRA="--extended --exclude feature_pruning,feature_dbcrash,wallet_multiwallet.py" # Temporarily suppress ASan heap-use-after-free (see issue #14163) export TEST_RUNNER_EXTRA="${TEST_RUNNER_EXTRA} --timeout-factor=4" # Increase timeout because sanitizers slow down export GOAL="install" -export BITCOIN_CONFIG="--enable-zmq --with-sanitizers=thread CC=clang-19 CXX=clang++-19 CXXFLAGS='-g'" +export BITCOIN_CONFIG="--enable-zmq --with-sanitizers=thread CC=clang-19 CXX=clang++-19" export CPPFLAGS="-DARENA_DEBUG -DDEBUG_LOCKORDER -DDEBUG_LOCKCONTENTION" export PYZMQ=true diff --git a/configure.ac b/configure.ac index 4dd273e57548..1fcbafbd99fd 100644 --- a/configure.ac +++ b/configure.ac @@ -1228,16 +1228,10 @@ if test "$enable_stacktraces" != "no"; then ]) fi BACKTRACE_LIBS="$BACKTRACE_LIBS -lbacktrace" - dnl More modern compilers may emit DWARF 5 binaries by default, use DWARF 4 out of precaution - if test "$TARGET_OS" != "windows"; then - AX_CHECK_COMPILE_FLAG([-gdwarf-4], [BACKTRACE_FLAGS="$BACKTRACE_FLAGS -gdwarf-4"], [ - if test "$enable_stacktraces" = "yes"; then - AC_MSG_ERROR([--enable-stacktraces was specified but cannot set -gdwarf-4]) - fi - AC_MSG_WARN([cannot set -gdwarf-4, stacktraces will be disabled]) - enable_stacktraces=no - ], [$CXXFLAG_WERROR]) - fi + dnl The libbacktrace pinned in depends understands DWARF 5, so the + dnl compiler's default debug format is used as-is. A -gdwarf-4 pin + dnl previously lived here and, being a -g-family flag, also forced + dnl debug level 2 onto every build. if test "$TARGET_OS" = "darwin"; then AX_CHECK_COMPILE_FLAG([-fno-standalone-debug], [BACKTRACE_FLAGS="$BACKTRACE_FLAGS -fno-standalone-debug"], [ if test "$enable_stacktraces" = "yes"; then @@ -2139,10 +2133,10 @@ echo " target os = $host_os" echo " build os = $build_os" echo echo " CC = $CC" -echo " CFLAGS = $DEBUG_CFLAGS $PTHREAD_CFLAGS $BACKTRACE_FLAGS $CFLAGS" +echo " CFLAGS = $BACKTRACE_FLAGS $DEBUG_CFLAGS $PTHREAD_CFLAGS $CFLAGS" echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CORE_CPPFLAGS $CPPFLAGS" echo " CXX = $CXX" -echo " CXXFLAGS = $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $CORE_CXXFLAGS $BACKTRACE_FLAGS $CXXFLAGS" +echo " CXXFLAGS = $BACKTRACE_FLAGS $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $CORE_CXXFLAGS $CXXFLAGS" echo " LDFLAGS = $PTHREAD_LIBS $HARDENED_LDFLAGS $CORE_LDFLAGS $BACKTRACE_LDFLAGS $LDFLAGS" echo " AR = $AR" echo " ARFLAGS = $ARFLAGS" diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index 8c517368d17a..0c9fda7ad11d 100755 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -222,7 +222,13 @@ HOST_CFLAGS+=$(find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " - case "$HOST" in *linux*) HOST_CFLAGS+=" -ffile-prefix-map=${PWD}=." ;; *mingw*) HOST_CFLAGS+=" -fno-ident" ;; - *darwin*) unset HOST_CFLAGS ;; + *darwin*) + # Optimization and target flags come from depends' config.site; only + # the debug level is requested here. The shipped dSYM debug artifacts + # previously carried full -g2 DWARF via the since-removed -gdwarf-4 + # backtrace flag escalating configure's -g1 floor, so keep requesting + # it explicitly. + HOST_CFLAGS="-g" ;; esac # CXXFLAGS diff --git a/src/Makefile.am b/src/Makefile.am index 501a695cf852..30fdf4702361 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,8 +10,12 @@ print-%: FORCE DIST_SUBDIRS = secp256k1 AM_LDFLAGS = $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) $(SANITIZER_LDFLAGS) $(CORE_LDFLAGS) $(BACKTRACE_LDFLAGS) -AM_CFLAGS = $(DEBUG_CFLAGS) $(BACKTRACE_FLAGS) -AM_CXXFLAGS = $(DEBUG_CXXFLAGS) $(HARDENED_CXXFLAGS) $(WARN_CXXFLAGS) $(NOWARN_CXXFLAGS) $(ERROR_CXXFLAGS) $(SANITIZER_CXXFLAGS) $(CORE_CXXFLAGS) $(BACKTRACE_FLAGS) +# BACKTRACE_FLAGS must precede the debug-level flags: -g-family members placed +# there (e.g. a -gdwarf-N version pin) imply -g2, so the intended level +# (DEBUG_*FLAGS' -g1 floor, --enable-debug's -g3, or the user's CXXFLAGS) must +# come later to take effect. +AM_CFLAGS = $(BACKTRACE_FLAGS) $(DEBUG_CFLAGS) +AM_CXXFLAGS = $(BACKTRACE_FLAGS) $(DEBUG_CXXFLAGS) $(HARDENED_CXXFLAGS) $(WARN_CXXFLAGS) $(NOWARN_CXXFLAGS) $(ERROR_CXXFLAGS) $(SANITIZER_CXXFLAGS) $(CORE_CXXFLAGS) AM_OBJCXXFLAGS = $(AM_CXXFLAGS) AM_CPPFLAGS = $(DEBUG_CPPFLAGS) $(HARDENED_CPPFLAGS) $(CORE_CPPFLAGS) AM_LIBTOOLFLAGS = --preserve-dup-deps