diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 10 | ||||
-rw-r--r-- | gdb/symfile.c | 22 |
4 files changed, 42 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bef807d..efe07af 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2019-05-03 Eli Zaretskii <eliz@gnu.org> + + * symfile.c (find_separate_debug_file): Remove colon from the + drive spec of DOS/Windows file names of the target, so that the + file name produced from DEBUGDIR and the target's directory will + be valid on DOS/Windows systems. + 2019-05-02 Andrew Burgess <andrew.burgess@embecosm.com> * rust-lang.c (val_print_struct): Handle printing structures diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 4166f19..a26e20c 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,9 @@ +2019-05-03 Eli Zaretskii <eliz@gnu.org> + + * gdb.texinfo (Separate Debug Files): Document how the + subdirectory of the global debug directory is computed on + MS-Windows/MS-DOS. + 2019-04-29 Andrew Burgess <andrew.burgess@embecosm.com> * gdb.texinfo (Print Settings): Document 'print max-depth'. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 2282c80..dd8ae91 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -20007,9 +20007,13 @@ uses two different methods of looking for the debug file: @item For the ``debug link'' method, @value{GDBN} looks up the named file in the directory of the executable file, then in a subdirectory of that -directory named @file{.debug}, and finally under each one of the global debug -directories, in a subdirectory whose name is identical to the leading -directories of the executable's absolute file name. +directory named @file{.debug}, and finally under each one of the +global debug directories, in a subdirectory whose name is identical to +the leading directories of the executable's absolute file name. (On +MS-Windows/MS-DOS, the drive letter of the executable's leading +directories is converted to a one-letter subdirectory, i.e.@: +@file{d:/usr/bin/} is converted to @file{/d/usr/bin/}, because Windows +filesystems disallow colons in file names.) @item For the ``build ID'' method, @value{GDBN} looks in the diff --git a/gdb/symfile.c b/gdb/symfile.c index 5736666..af99da1 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -1443,11 +1443,33 @@ find_separate_debug_file (const char *dir, = dirnames_to_char_ptr_vec (debug_file_directory); gdb::unique_xmalloc_ptr<char> canon_sysroot = gdb_realpath (gdb_sysroot); + /* MS-Windows/MS-DOS don't allow colons in file names; we must + convert the drive letter into a one-letter directory, so that the + file name resulting from splicing below will be valid. + + FIXME: The below only works when GDB runs on MS-Windows/MS-DOS. + There are various remote-debugging scenarios where such a + transformation of the drive letter might be required when GDB runs + on a Posix host, see + + https://sourceware.org/ml/gdb-patches/2019-04/msg00605.html + + If some of those scenarions need to be supported, we will need to + use a different condition for HAS_DRIVE_SPEC and a different macro + instead of STRIP_DRIVE_SPEC, which work on Posix systems as well. */ + std::string drive; + if (HAS_DRIVE_SPEC (dir_notarget)) + { + drive = dir_notarget[0]; + dir_notarget = STRIP_DRIVE_SPEC (dir_notarget); + } + for (const gdb::unique_xmalloc_ptr<char> &debugdir : debugdir_vec) { debugfile = target_prefix ? "target:" : ""; debugfile += debugdir.get (); debugfile += "/"; + debugfile += drive; debugfile += dir_notarget; debugfile += debuglink; |