* configure.ac (DEBUGDIR_RELOCATABLE): Define for debugdir inside
exec_prefix. (TARGET_SYSTEM_ROOT_RELOCATABLE): Allow for exec_prefix being '${prefix}'. * configure, config.in: Regenerate. * defs.h (debug_file_directory): Declare. * main.c (captured_main): Canonicalize gdb_sysroot. Assume TARGET_SYSTEM_ROOT is defined. Initialize debug_file_directory and relocate it if DEBUGDIR_RELOCATABLE. * symfile.c (debug_file_directory): Make non-static. (find_separate_debug_file): Look for debug info for SYSROOT/PATH in DEBUGDIR/PATH if DEBUGDIR is inside SYSROOT. (_initialize_symfile): Don't initialize debug_file_directory here.
This commit is contained in:
parent
1cfd2c3eed
commit
aa28a74efb
7 changed files with 133 additions and 10 deletions
|
@ -1,3 +1,19 @@
|
||||||
|
2007-01-09 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* configure.ac (DEBUGDIR_RELOCATABLE): Define for debugdir inside
|
||||||
|
exec_prefix.
|
||||||
|
(TARGET_SYSTEM_ROOT_RELOCATABLE): Allow for exec_prefix being
|
||||||
|
'${prefix}'.
|
||||||
|
* configure, config.in: Regenerate.
|
||||||
|
* defs.h (debug_file_directory): Declare.
|
||||||
|
* main.c (captured_main): Canonicalize gdb_sysroot. Assume
|
||||||
|
TARGET_SYSTEM_ROOT is defined. Initialize debug_file_directory and
|
||||||
|
relocate it if DEBUGDIR_RELOCATABLE.
|
||||||
|
* symfile.c (debug_file_directory): Make non-static.
|
||||||
|
(find_separate_debug_file): Look for debug info for SYSROOT/PATH
|
||||||
|
in DEBUGDIR/PATH if DEBUGDIR is inside SYSROOT.
|
||||||
|
(_initialize_symfile): Don't initialize debug_file_directory here.
|
||||||
|
|
||||||
2007-01-09 Jim Blandy <jimb@codesourcery.com>
|
2007-01-09 Jim Blandy <jimb@codesourcery.com>
|
||||||
|
|
||||||
* score-tdep.c (score_push_dummy_call): Don't mix declarations and
|
* score-tdep.c (score_push_dummy_call): Don't mix declarations and
|
||||||
|
|
|
@ -14,6 +14,9 @@
|
||||||
/* Global directory for separate debug files. */
|
/* Global directory for separate debug files. */
|
||||||
#undef DEBUGDIR
|
#undef DEBUGDIR
|
||||||
|
|
||||||
|
/* Define if the debug directory should be relocated when GDB is moved. */
|
||||||
|
#undef DEBUGDIR_RELOCATABLE
|
||||||
|
|
||||||
/* Define to BFD's default architecture. */
|
/* Define to BFD's default architecture. */
|
||||||
#undef DEFAULT_BFD_ARCH
|
#undef DEFAULT_BFD_ARCH
|
||||||
|
|
||||||
|
|
22
gdb/configure
vendored
22
gdb/configure
vendored
|
@ -3053,6 +3053,26 @@ _ACEOF
|
||||||
|
|
||||||
#AC_DEFINE_UNQUOTED(DEBUGDIR, "$debugdir"),
|
#AC_DEFINE_UNQUOTED(DEBUGDIR, "$debugdir"),
|
||||||
|
|
||||||
|
if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
|
||||||
|
if test "x$prefix" = xNONE; then
|
||||||
|
test_prefix=/usr/local
|
||||||
|
else
|
||||||
|
test_prefix=$prefix
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_prefix=$exec_prefix
|
||||||
|
fi
|
||||||
|
case ${debugdir} in
|
||||||
|
"${test_prefix}"|"${test_prefix}/"*|\
|
||||||
|
'${exec_prefix}'|'${exec_prefix}/'*)
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define DEBUGDIR_RELOCATABLE 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
subdirs="$subdirs doc testsuite"
|
subdirs="$subdirs doc testsuite"
|
||||||
|
@ -21172,7 +21192,7 @@ if test "${with_sysroot+set}" = set; then
|
||||||
|
|
||||||
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
|
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
|
||||||
|
|
||||||
if test "x$exec_prefix" = xNONE; then
|
if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
|
||||||
if test "x$prefix" = xNONE; then
|
if test "x$prefix" = xNONE; then
|
||||||
test_prefix=/usr/local
|
test_prefix=/usr/local
|
||||||
else
|
else
|
||||||
|
|
|
@ -75,6 +75,22 @@ AC_DEFINE_DIR(DEBUGDIR, debugdir,
|
||||||
[Global directory for separate debug files. ])
|
[Global directory for separate debug files. ])
|
||||||
#AC_DEFINE_UNQUOTED(DEBUGDIR, "$debugdir"),
|
#AC_DEFINE_UNQUOTED(DEBUGDIR, "$debugdir"),
|
||||||
|
|
||||||
|
if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
|
||||||
|
if test "x$prefix" = xNONE; then
|
||||||
|
test_prefix=/usr/local
|
||||||
|
else
|
||||||
|
test_prefix=$prefix
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_prefix=$exec_prefix
|
||||||
|
fi
|
||||||
|
case ${debugdir} in
|
||||||
|
"${test_prefix}"|"${test_prefix}/"*|\
|
||||||
|
'${exec_prefix}'|'${exec_prefix}/'*)
|
||||||
|
AC_DEFINE(DEBUGDIR_RELOCATABLE, 1, [Define if the debug directory should be relocated when GDB is moved.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
AC_CONFIG_SUBDIRS(doc testsuite)
|
AC_CONFIG_SUBDIRS(doc testsuite)
|
||||||
|
|
||||||
# Provide defaults for some variables set by the per-host and per-target
|
# Provide defaults for some variables set by the per-host and per-target
|
||||||
|
@ -1102,7 +1118,7 @@ AC_ARG_WITH(sysroot,
|
||||||
|
|
||||||
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
|
TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
|
||||||
|
|
||||||
if test "x$exec_prefix" = xNONE; then
|
if test "x$exec_prefix" = xNONE || test "x$exec_prefix" = 'x${prefix}'; then
|
||||||
if test "x$prefix" = xNONE; then
|
if test "x$prefix" = xNONE; then
|
||||||
test_prefix=/usr/local
|
test_prefix=/usr/local
|
||||||
else
|
else
|
||||||
|
|
|
@ -167,6 +167,9 @@ extern int dbx_commands;
|
||||||
/* System root path, used to find libraries etc. */
|
/* System root path, used to find libraries etc. */
|
||||||
extern char *gdb_sysroot;
|
extern char *gdb_sysroot;
|
||||||
|
|
||||||
|
/* Search path for separate debug files. */
|
||||||
|
extern char *debug_file_directory;
|
||||||
|
|
||||||
extern int quit_flag;
|
extern int quit_flag;
|
||||||
extern int immediate_quit;
|
extern int immediate_quit;
|
||||||
extern int sevenbit_strings;
|
extern int sevenbit_strings;
|
||||||
|
|
53
gdb/main.c
53
gdb/main.c
|
@ -221,19 +221,60 @@ captured_main (void *data)
|
||||||
if (res == 0)
|
if (res == 0)
|
||||||
{
|
{
|
||||||
xfree (gdb_sysroot);
|
xfree (gdb_sysroot);
|
||||||
gdb_sysroot = TARGET_SYSTEM_ROOT;
|
gdb_sysroot = xstrdup (TARGET_SYSTEM_ROOT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
gdb_sysroot = TARGET_SYSTEM_ROOT;
|
gdb_sysroot = xstrdup (TARGET_SYSTEM_ROOT);
|
||||||
#else
|
#else
|
||||||
#if defined (TARGET_SYSTEM_ROOT)
|
gdb_sysroot = xstrdup (TARGET_SYSTEM_ROOT);
|
||||||
gdb_sysroot = TARGET_SYSTEM_ROOT;
|
#endif
|
||||||
|
|
||||||
|
/* Canonicalize the sysroot path. */
|
||||||
|
if (*gdb_sysroot)
|
||||||
|
{
|
||||||
|
char *canon_sysroot = lrealpath (gdb_sysroot);
|
||||||
|
if (canon_sysroot)
|
||||||
|
{
|
||||||
|
xfree (gdb_sysroot);
|
||||||
|
gdb_sysroot = canon_sysroot;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUGDIR_RELOCATABLE
|
||||||
|
debug_file_directory = make_relative_prefix (argv[0], BINDIR, DEBUGDIR);
|
||||||
|
if (debug_file_directory)
|
||||||
|
{
|
||||||
|
struct stat s;
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
if (stat (debug_file_directory, &s) == 0)
|
||||||
|
if (S_ISDIR (s.st_mode))
|
||||||
|
res = 1;
|
||||||
|
|
||||||
|
if (res == 0)
|
||||||
|
{
|
||||||
|
xfree (debug_file_directory);
|
||||||
|
debug_file_directory = xstrdup (DEBUGDIR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
debug_file_directory = xstrdup (DEBUGDIR);
|
||||||
#else
|
#else
|
||||||
gdb_sysroot = "";
|
debug_file_directory = xstrdup (DEBUGDIR);
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Canonicalize the debugfile path. */
|
||||||
|
if (*debug_file_directory)
|
||||||
|
{
|
||||||
|
char *canon_debug = lrealpath (debug_file_directory);
|
||||||
|
if (canon_debug)
|
||||||
|
{
|
||||||
|
xfree (debug_file_directory);
|
||||||
|
debug_file_directory = canon_debug;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* There will always be an interpreter. Either the one passed into
|
/* There will always be an interpreter. Either the one passed into
|
||||||
this captured main, or one specified by the user at start up, or
|
this captured main, or one specified by the user at start up, or
|
||||||
the console. Initialize the interpreter to the one requested by
|
the console. Initialize the interpreter to the one requested by
|
||||||
|
|
|
@ -1156,7 +1156,7 @@ separate_debug_file_exists (const char *name, unsigned long crc)
|
||||||
return crc == file_crc;
|
return crc == file_crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *debug_file_directory = NULL;
|
char *debug_file_directory = NULL;
|
||||||
static void
|
static void
|
||||||
show_debug_file_directory (struct ui_file *file, int from_tty,
|
show_debug_file_directory (struct ui_file *file, int from_tty,
|
||||||
struct cmd_list_element *c, const char *value)
|
struct cmd_list_element *c, const char *value)
|
||||||
|
@ -1178,6 +1178,7 @@ find_separate_debug_file (struct objfile *objfile)
|
||||||
char *dir;
|
char *dir;
|
||||||
char *debugfile;
|
char *debugfile;
|
||||||
char *name_copy;
|
char *name_copy;
|
||||||
|
char *canon_name;
|
||||||
bfd_size_type debuglink_size;
|
bfd_size_type debuglink_size;
|
||||||
unsigned long crc32;
|
unsigned long crc32;
|
||||||
int i;
|
int i;
|
||||||
|
@ -1245,6 +1246,30 @@ find_separate_debug_file (struct objfile *objfile)
|
||||||
return xstrdup (debugfile);
|
return xstrdup (debugfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the file is in the sysroot, try using its base path in the
|
||||||
|
global debugfile directory. */
|
||||||
|
canon_name = lrealpath (dir);
|
||||||
|
if (canon_name
|
||||||
|
&& strncmp (canon_name, gdb_sysroot, strlen (gdb_sysroot)) == 0
|
||||||
|
&& IS_DIR_SEPARATOR (canon_name[strlen (gdb_sysroot)]))
|
||||||
|
{
|
||||||
|
strcpy (debugfile, debug_file_directory);
|
||||||
|
strcat (debugfile, canon_name + strlen (gdb_sysroot));
|
||||||
|
strcat (debugfile, "/");
|
||||||
|
strcat (debugfile, basename);
|
||||||
|
|
||||||
|
if (separate_debug_file_exists (debugfile, crc32))
|
||||||
|
{
|
||||||
|
xfree (canon_name);
|
||||||
|
xfree (basename);
|
||||||
|
xfree (dir);
|
||||||
|
return xstrdup (debugfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (canon_name)
|
||||||
|
xfree (canon_name);
|
||||||
|
|
||||||
xfree (basename);
|
xfree (basename);
|
||||||
xfree (dir);
|
xfree (dir);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3857,7 +3882,6 @@ Usage: set extension-language .foo bar"),
|
||||||
add_info ("extensions", info_ext_lang_command,
|
add_info ("extensions", info_ext_lang_command,
|
||||||
_("All filename extensions associated with a source language."));
|
_("All filename extensions associated with a source language."));
|
||||||
|
|
||||||
debug_file_directory = xstrdup (DEBUGDIR);
|
|
||||||
add_setshow_optional_filename_cmd ("debug-file-directory", class_support,
|
add_setshow_optional_filename_cmd ("debug-file-directory", class_support,
|
||||||
&debug_file_directory, _("\
|
&debug_file_directory, _("\
|
||||||
Set the directory where separate debug symbols are searched for."), _("\
|
Set the directory where separate debug symbols are searched for."), _("\
|
||||||
|
|
Loading…
Add table
Reference in a new issue