Look for separate debug files in debug directories under a sysroot.
When an object file is present in a system root, GDB currently looks for separate debug files under the global debugfile directories. For example, if the sysroot is set to "/myroot" and hte global debugfile directory is set to "/usr/lib/debug", GDB will look for a separate debug file for "/myroot/lib/libc.so.7" in the following paths: /myroot/lib/libc.so.7.debug /myroot/lib/.debug/libc.so.7.debug /usr/lib/debug//myroot/lib/libc.so.7.debug /usr/lib/debug/lib/libc.so.7.debug However, some system roots include a full system installation including a nested global debugfile directory under the sysroot. This patch adds an additional check to support such systems. In the example above the additional path searched is: /myroot/usr/lib/debug/lib/libc.so.7.debug To try to preserve existing behavior as much as possible, this new path is searched last for each global debugfile directory. gdb/ChangeLog: * symfile.c (find_separate_debug_file): Look for separate debug files in debug directories under the sysroot.
This commit is contained in:
parent
1ed9f74e85
commit
402d2bfec4
@ -1,3 +1,8 @@
|
||||
2019-02-12 John Baldwin <jhb@FreeBSD.org>
|
||||
|
||||
* symfile.c (find_separate_debug_file): Look for separate debug
|
||||
files in debug directories under the sysroot.
|
||||
|
||||
2019-02-12 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* symtab.h (struct minimal_symbol data_p): New const method.
|
||||
|
@ -1452,22 +1452,35 @@ find_separate_debug_file (const char *dir,
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile))
|
||||
return debugfile;
|
||||
|
||||
/* If the file is in the sysroot, try using its base path in the
|
||||
global debugfile directory. */
|
||||
if (canon_dir != NULL
|
||||
&& filename_ncmp (canon_dir, gdb_sysroot,
|
||||
strlen (gdb_sysroot)) == 0
|
||||
&& IS_DIR_SEPARATOR (canon_dir[strlen (gdb_sysroot)]))
|
||||
{
|
||||
/* If the file is in the sysroot, try using its base path in
|
||||
the global debugfile directory. */
|
||||
debugfile = target_prefix ? "target:" : "";
|
||||
debugfile += debugdir.get ();
|
||||
debugfile += (canon_dir + strlen (gdb_sysroot));
|
||||
debugfile += "/";
|
||||
debugfile += debuglink;
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile))
|
||||
return debugfile;
|
||||
|
||||
/* If the file is in the sysroot, try using its base path in
|
||||
the sysroot's global debugfile directory. */
|
||||
debugfile = target_prefix ? "target:" : "";
|
||||
debugfile += gdb_sysroot;
|
||||
debugfile += debugdir.get ();
|
||||
debugfile += (canon_dir + strlen (gdb_sysroot));
|
||||
debugfile += "/";
|
||||
debugfile += debuglink;
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile))
|
||||
return debugfile;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return std::string ();
|
||||
|
Loading…
Reference in New Issue
Block a user