Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Simon Marchi <simark@simark.ca>
Cc: gdb-patches@sourceware.org
Subject: Re: Fix lookup of separate debug file on MS-Windows
Date: Mon, 22 Apr 2019 09:19:00 -0000	[thread overview]
Message-ID: <835zr68kiw.fsf@gnu.org> (raw)
In-Reply-To: <2697b965-e108-5e7c-75d3-9baa7493141c@simark.ca> (message from	Simon Marchi on Sun, 21 Apr 2019 08:55:07 -0400)

> From: Simon Marchi <simark@simark.ca>
> Date: Sun, 21 Apr 2019 08:55:07 -0400
> 
> On 2019-04-21 8:05 a.m., Eli Zaretskii wrote:
> > Ping!
> > 
> > Would people please voice their opinions regarding preservation of the
> > drive letter (and removing the colon) vs just dropping the drive
> > letter altogether?  I'd like to fix this issue for the upcoming
> > release of GDB 8.3.
> 
> I first read your patch (which initiated this thread), and my first reaction was
> also to be surprised that we would lose the drive letter.  The risk of clash
> is low, but why take that risk at all when it's easy enough to keep the drive letter
> and just strip the colon?

OK, so how about the patch below?

> I don't know the complete history of this, so if you know about distributions that
> place debug files in a path without the drive letter (what your patch implements),
> then I would be fine if GDB looked in both places, starting with the path including
> the drive letter.

I'm not aware of any Windows distributions that put debug info in the
directory suggested by my previous patch.  So I think we can safely
use just the /X/ subdirectory method.

diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index a3a5f3e..533a52c 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -19917,7 +19917,11 @@
 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.
+directories of the executable's absolute file name.  (On MS-Windows,
+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..5749c61 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1443,11 +1443,24 @@ 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.  */
+  std::string drive;
+  if (HAS_DRIVE_SPEC (dir_notarget))
+    {
+      drive = std::string (1, dir_notarget[0]);
+      dir_notarget = STRIP_DRIVE_SPEC (dir_notarget);
+    }
+  else
+    drive = "";
+
   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;
 


  reply	other threads:[~2019-04-22  9:19 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-18 13:49 Eli Zaretskii
2019-04-18 16:19 ` LRN
2019-04-18 18:41   ` Eli Zaretskii
2019-04-18 21:42     ` LRN
2019-04-19  6:48       ` Eli Zaretskii
2019-04-19 10:06         ` LRN
2019-04-21 12:06     ` Eli Zaretskii
2019-04-21 12:55       ` Simon Marchi
2019-04-22  9:19         ` Eli Zaretskii [this message]
2019-04-27 10:56           ` Eli Zaretskii
2019-04-27 16:16           ` Simon Marchi
2019-04-27 16:39             ` Eli Zaretskii
2019-04-27 18:56               ` Simon Marchi
2019-04-27 19:05                 ` Eli Zaretskii
2019-05-03  7:36                   ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=835zr68kiw.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=simark@simark.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox