diff options
author | Thiago Jung Bauermann <thiago.bauermann@linaro.org> | 2023-06-02 22:39:54 +0200 |
---|---|---|
committer | Thiago Jung Bauermann <thiago.bauermann@linaro.org> | 2023-08-16 09:25:22 -0300 |
commit | c70f1451986711603276842020aef304fa26908f (patch) | |
tree | e5e8f227d0bbe80dbf90142f4810d08887bd21aa | |
parent | da1f552dc79476275af282b65c5317ab3b4dbd9a (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.in | 3 | ||||
-rwxr-xr-x | gdb/configure | 31 | ||||
-rw-r--r-- | gdb/configure.ac | 6 | ||||
-rw-r--r-- | gdb/main.c | 5 | ||||
-rw-r--r-- | gdb/top.c | 6 |
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\ |