aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Jung Bauermann <thiago.bauermann@linaro.org>2023-06-02 22:39:54 +0200
committerThiago Jung Bauermann <thiago.bauermann@linaro.org>2023-08-16 09:25:22 -0300
commitc70f1451986711603276842020aef304fa26908f (patch)
treee5e8f227d0bbe80dbf90142f4810d08887bd21aa
parentda1f552dc79476275af282b65c5317ab3b4dbd9a (diff)
gdb/configure.ac: Add option --with-additional-debug-dirslinaro-local/gdb-additional-debug-dirs
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.
-rw-r--r--gdb/config.in3
-rwxr-xr-xgdb/configure31
-rw-r--r--gdb/configure.ac6
-rw-r--r--gdb/main.c5
-rw-r--r--gdb/top.c6
5 files changed, 44 insertions, 7 deletions
diff --git a/gdb/config.in b/gdb/config.in
index bc562669d2c..1333a9c3157 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -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
diff --git a/gdb/configure b/gdb/configure
index ab1a299d860..c5f7b82a11f 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -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
+ 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
@@ -4944,7 +4948,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -4990,7 +4994,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5014,7 +5018,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5059,7 +5063,7 @@ else
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -5083,7 +5087,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
@@ -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
@@ -24119,6 +24134,8 @@ main ()
if (*(data + i) != *(data3 + i))
return 14;
close (fd);
+ free (data);
+ free (data3);
return 0;
}
_ACEOF
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 97c6bf0ed5f..e967669b294 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -119,6 +119,12 @@ 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],
+ [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
diff --git a/gdb/main.c b/gdb/main.c
index 3e93f583947..87be933ff03 100644
--- a/gdb/main.c
+++ b/gdb/main.c
@@ -719,6 +719,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);
diff --git a/gdb/top.c b/gdb/top.c
index 2322e55f1db..3675122373b 100644
--- 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\