gdb/configure.ac: Add option --with-additional-debug-dirs
authorThiago Jung Bauermann <thiago.bauermann@linaro.org>
Fri, 2 Jun 2023 20:39:54 +0000 (22:39 +0200)
committerThiago Jung Bauermann <thiago.bauermann@linaro.org>
Fri, 6 Oct 2023 01:58:11 +0000 (22:58 -0300)
If you want to install GDB in a custom prefix, have it look for debug info
in that prefix but also in the distro's default location (typically,
/usr/lib/debug) and run the GDB testsuite before doing "make install", you
have a bit of a problem:

Configuring GDB with '--prefix=$PREFIX' sets the GDB 'debug-file-directory'
parameter to $PREFIX/lib/debug.  Unfortunately this precludes GDB from
looking for distro-installed debug info in /usr/lib/debug.  For regular GDB
use you could set debug-file-directory to $PREFIX:/usr/lib/debug in
$PREFIX/etc/gdbinit so that GDB will look in both places, but if you want
to run the testsuite then that doesn't help because in that case GDB runs
with the '-nx' option.

There's the configure option '--with-separate-debug-dir' to set the default
value for 'debug-file-directory', but it accepts only one directory and not
a list.  I considered modifying it to accept a list, but it's not obvious
how to do that because its value is also used by BFD, as well as processed
for "relocatability".

I thought it was simpler to add a new option to specify a list of
additional directories that will be appended to the debug-file-directory
setting.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
gdb/NEWS
gdb/config.in
gdb/configure
gdb/configure.ac
gdb/doc/gdb.texinfo
gdb/main.c
gdb/top.c

index fc4c7c0166131ef489e8f8d5799484c6dceb01d4..c371a9f3bff0ccc2b6b2bf7089952dcf641c1bca 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
   'inferior' keyword with either the 'thread' or 'task' keywords when
   creating a breakpoint.
 
+* Configure changes
+
+--additional-debug-dirs=PATHs
+
+  Provide a colon-separated list of additional directories to search for
+  separate debug info.  These directories are added to the default value of
+  the 'debug-file-directory' GDB parameter.
+
 * New commands
 
 set debug breakpoint on|off
index f67d3029d82947fdd90d402bc3ead9c50bec8ea6..e17245156d8dd371e289bd1ae4b024de206c325d 100644 (file)
@@ -3,6 +3,9 @@
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
+/* Additional directories to look for separate debug info. */
+#undef ADDITIONAL_DEBUG_DIRS
+
 /* Directories from which to load auto-loaded scripts. */
 #undef AUTO_LOAD_DIR
 
index 2d07e0cb596e9af9e0fe1ffef5aca7bf60008a3a..1cbc356cb9677840bef8df3846985ee0f6ccd737 100755 (executable)
@@ -906,6 +906,7 @@ enable_fast_install
 with_gnu_ld
 enable_libtool_lock
 with_separate_debug_dir
+with_additional_debug_dirs
 with_gdb_datadir
 with_relocated_sources
 with_auto_load_dir
@@ -1660,6 +1661,9 @@ Optional Packages:
   --with-separate-debug-dir=PATH
                           look for global separate debug info in this path
                           [LIBDIR/debug]
+  --with-additional-debug-dirs=PATHs
+                          colon-separated list of additional directories to
+                          search for separate debug info
   --with-gdb-datadir=PATH look for global separate data files in this path
                           [DATADIR/gdb]
   --with-relocated-sources=PATH
@@ -11479,7 +11483,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11482 "configure"
+#line 11486 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11585,7 +11589,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11588 "configure"
+#line 11592 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -17886,6 +17890,17 @@ _ACEOF
 
 
 
+
+# Check whether --with-additional-debug-dirs was given.
+if test "${with_additional_debug_dirs+set}" = set; then :
+  withval=$with_additional_debug_dirs;
+cat >>confdefs.h <<_ACEOF
+#define ADDITIONAL_DEBUG_DIRS "${withval}"
+_ACEOF
+
+fi
+
+
 # We can't pass paths as command line arguments.
 # Mingw32 tries to be clever and will convert the paths for us.
 # For example -DBINDIR="/usr/local/bin" passed on the command line may get
index 97c6bf0ed5f905b88cfece0b58f21eee762f17ce..0264199b9481e77d553ad9755a13734540797f26 100644 (file)
@@ -119,6 +119,14 @@ GDB_AC_WITH_DIR(DEBUGDIR, separate-debug-dir,
     [look for global separate debug info in this path @<:@LIBDIR/debug@:>@],
     [${libdir}/debug])
 
+AC_ARG_WITH(additional-debug-dirs,
+           AS_HELP_STRING([--with-additional-debug-dirs=PATHs],
+                          [colon-separated list of additional directories to
+                           search for separate debug info]),
+           [AC_DEFINE_UNQUOTED(ADDITIONAL_DEBUG_DIRS, "${withval}",
+                               Additional directories to look for separate
+                               debug info.)])
+
 # We can't pass paths as command line arguments.
 # Mingw32 tries to be clever and will convert the paths for us.
 # For example -DBINDIR="/usr/local/bin" passed on the command line may get
index d254650e6d76a6e6a6e1e2fefe6174ffd534a671..4932e49b7588dca27f9cce29b501b93eadc30e04 100644 (file)
@@ -22275,8 +22275,10 @@ file from @code{debuginfod} servers.
 
 @anchor{debug-file-directory}
 Global debugging info directories default to what is set by @value{GDBN}
-configure option @option{--with-separate-debug-dir}.  During @value{GDBN} run
-you can also set the global debugging info directories, and view the list
+configure option @option{--with-separate-debug-dir} and augmented by the
+colon-separated list of directories provided via @value{GDBN} configure
+option @option{--additional-debug-dirs}.  During @value{GDBN} run you can
+also set the global debugging info directories, and view the list
 @value{GDBN} is currently using.
 
 @table @code
index 8a1c2690100a088dd17787f9fe7dda4f14c5c374..2da39f89a90f3025f085d851d0ca80ea3cc7a971 100644 (file)
@@ -718,6 +718,11 @@ captured_main_1 (struct captured_main_args *context)
   debug_file_directory
     = relocate_gdb_directory (DEBUGDIR, DEBUGDIR_RELOCATABLE);
 
+#ifdef ADDITIONAL_DEBUG_DIRS
+  debug_file_directory = (debug_file_directory + DIRNAME_SEPARATOR
+                         + ADDITIONAL_DEBUG_DIRS);
+#endif
+
   gdb_datadir = relocate_gdb_directory (GDB_DATADIR,
                                        GDB_DATADIR_RELOCATABLE);
 
index cbe14b0104664c450cf97d912230fb77244ed12d..5028440b67116de5d9cde3134654c1e75f9e8162 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1587,6 +1587,12 @@ This GDB was configured as follows:\n\
             --with-separate-debug-dir=%s%s\n\
 "), DEBUGDIR, DEBUGDIR_RELOCATABLE ? " (relocatable)" : "");
 
+#ifdef ADDITIONAL_DEBUG_DIRS
+  gdb_printf (stream, _ ("\
+            --with-additional-debug-dirs=%s\n\
+"), ADDITIONAL_DEBUG_DIRS);
+#endif
+
   if (TARGET_SYSTEM_ROOT[0])
     gdb_printf (stream, _("\
             --with-sysroot=%s%s\n\