Add configure check for gdb-add-index vs dwz main
authorMark Wielaard <mark@klomp.org>
Wed, 10 Sep 2025 13:25:59 +0000 (15:25 +0200)
committerMark Wielaard <mark@klomp.org>
Wed, 10 Sep 2025 15:35:55 +0000 (17:35 +0200)
Sadly gdb version >= 15 and dwz < 0.16 are incompatible.
gdb-add-index will produce .gdb_index version 9 which dwz cannot
handle (and silently throws away). Making gdb-add-index plus dwz tests
fail.  This is not very accurate, there are dwz versions 0.15 with the
gdb_index version 9 support backported where we currently also skip
testing.

* configure.ac: Add GDB_MAJOR, DWZ_MAJOR and DWZ_MINOR checks,
AC_SUBST GDB_ADD_INDEX_CHECKS_OK.
* tests/atlocal.in: Set GDB_ADD_INDEX_CHECKS_OK.
* tests/find-debuginfo.at: AT_SKIP_IF gdb-index index tests
when GDB_ADD_INDEX_CHECKS_OK is no.

Signed-off-by: Mark Wielaard <mark@klomp.org>
configure.ac
tests/atlocal.in
tests/find-debuginfo.at

index cd9b0422577c80e2c7e29e4d8465da1fb2b167c6..ad73fe7f0d9b3b782b461f6cbd6a45e598963dac 100644 (file)
@@ -217,6 +217,37 @@ else
 fi
 AC_SUBST([READELF_VERSION_OK])
 
+# Sadly gdb version >= 15 and dwz < 0.16 are incompatible.
+# gdb-add-index will produce .gdb_index version 9 which dwz cannot handle
+# (and silently throws away). Making gdb-add-index plus dwz tests fail.
+# This is not very accurate, there are dwz versions 0.15 with the gdb_index
+# version 9 support backported.
+GDB_VERSION_STRING=$(gdb --version | head -1)
+# The double [[ and ]] is because of configure.ac being an m4 script.
+GDB_VERSION_REGEXP='s/.* ([[0-9]]+)\.([[0-9]]+).*/\1/'
+GDB_MAJOR=$(echo "$GDB_VERSION_STRING" | sed -E "$GDB_VERSION_REGEXP")
+# Older dwz output --version to stderr.
+DWZ_VERSION_STRING=$(dwz --version 2>&1 | head -1)
+# The double [[ and ]] is because of configure.ac being an m4 script.
+DWZ_VERSION_REGEXP_MAJOR='s/.* ([[0-9]]+)\.([[0-9]]+).*/\1/'
+DWZ_VERSION_REGEXP_MINOR='s/.* ([[0-9]]+)\.([[0-9]]+).*/\2/'
+DWZ_MAJOR=$(echo "$DWZ_VERSION_STRING" | sed -E "$DWZ_VERSION_REGEXP_MAJOR")
+DWZ_MINOR=$(echo "$DWZ_VERSION_STRING" | sed -E "$DWZ_VERSION_REGEXP_MINOR")
+AC_CACHE_CHECK([gdb and dwz versions for gdb-add-index tests], ac_cv_gdb_dwz_ver, [dnl
+ac_cv_gdb_dwz_ver="$GDB_MAJOR-vs-$DWZ_MAJOR.$DWZ_MINOR"
+])
+if test "$GDB_MAJOR" -lt "15"; then
+  GDB_ADD_INDEX_CHECKS_OK="yes"
+elif test "$DWZ_MAJOR" -gt "0"; then
+  GDB_ADD_INDEX_CHECKS_OK="yes"
+elif test "$DWZ_MINOR" -ge "16"; then
+  GDB_ADD_INDEX_CHECKS_OK="yes"
+else
+  AC_MSG_WARN([$GDB_VERSION_STRING and $DWZ_VERSION_STRING cannot do gdb-add-index tests])
+  GDB_ADD_INDEX_CHECKS_OK="no"
+fi
+AC_SUBST([GDB_ADD_INDEX_CHECKS_OK])
+
 ENABLE_INLINED_XXHASH=yes
 AC_ARG_ENABLE(inlined-xxhash,
        AS_HELP_STRING([--disable-inlined-xxhash], [disable the inlined-only version of xxhash library]),
index 51feadbef691efc77fa936ed8ace038fc34fb1e2..5b1b367c1c2306b6f21047b43082fe0685d07fc7 100644 (file)
@@ -12,6 +12,7 @@ AR="@AR@"
 LDFLAGS=""
 READELF="@READELF@"
 READELF_VERSION_OK="@READELF_VERSION_OK@"
+GDB_ADD_INDEX_CHECKS_OK="@GDB_ADD_INDEX_CHECKS_OK@"
 
 GDWARF_5_FLAG=@GDWARF_5_FLAG@
 GZ_NONE_FLAG=@GZ_NONE_FLAG@
index 1d7ad579bbbba99d050828b5d0d4e062efb72fe9..26dcd2dc02a076dc9a0ef7c3f08bd2a55a95fd24 100644 (file)
@@ -269,6 +269,8 @@ AT_SETUP([find-debuginfo sources debugdata gdb-index dwz])
 AT_KEYWORDS([find-debuginfo] [sources] [debugdata] [gdb-index] [dwz])
 # At the moment dwz doesn't support .debug_addr
 AT_SKIP_IF([test "$DWARF_5_DEBUGADDR" = "yes"])
+# Too new gdb with too old gdb
+AT_SKIP_IF([test "$GDB_ADD_INDEX_CHECKS_OK" = "no"])
 FIND_DEBUGINFO_PKG_BUILD_SETUP
 # Sanity check the binaries have debug sections
 AT_CHECK([$READELF -S subdir_build/foo | grep debug_], [0], [ignore], [])
@@ -335,6 +337,8 @@ AT_SETUP([find-debuginfo sources debugdata gdb-index dwz jobs])
 AT_KEYWORDS([find-debuginfo] [sources] [debugdata] [gdb-index] [dwz] [jobs])
 # At the moment dwz doesn't support .debug_addr
 AT_SKIP_IF([test "$DWARF_5_DEBUGADDR" = "yes"])
+# Too new gdb with too old gdb
+AT_SKIP_IF([test "$GDB_ADD_INDEX_CHECKS_OK" = "no"])
 FIND_DEBUGINFO_PKG_BUILD_SETUP
 # Sanity check the binaries have debug sections
 AT_CHECK([$READELF -S subdir_build/foo | grep debug_], [0], [ignore], [])
This page took 0.06663 seconds and 5 git commands to generate.