From: Eli Zaretskii <eliz@gnu.org>
To: Sergio Durigan Junior <sergiodj@redhat.com>
Cc: gdb-patches@sourceware.org, palves@redhat.com
Subject: Re: [PATCH v3 4/5] Implement "set cwd" command on GDB
Date: Fri, 22 Sep 2017 08:03:00 -0000 [thread overview]
Message-ID: <83poajcg9a.fsf@gnu.org> (raw)
In-Reply-To: <20170921225926.23132-5-sergiodj@redhat.com> (message from Sergio Durigan Junior on Thu, 21 Sep 2017 18:59:25 -0400)
> From: Sergio Durigan Junior <sergiodj@redhat.com>
> Cc: Pedro Alves <palves@redhat.com>, Sergio Durigan Junior <sergiodj@redhat.com>
> Date: Thu, 21 Sep 2017 18:59:25 -0400
>
> This is the actual implementation of the "set/show cwd" commands on
> GDB. The way they work is:
>
> - If the user sets the inferior's cwd by using "set cwd", then this
> directory is saved into current_inferior ()->cwd and is used when
> the inferior is started (see below).
>
> - If the user doesn't set the inferior's cwd by using "set cwd", but
> rather use the "cd" command as before, then this directory is
> inherited by the inferior because GDB will have chdir'd into it.
>
> On Unix-like hosts, the way the directory is changed before the
> inferior execution is by expanding the user set directory before the
> fork, and then "chdir" after the call to fork/vfork on
> "fork_inferior", but before the actual execution. On Windows, the
> inferior cwd set by the user is passed directly to the CreateProcess
> call, which takes care of the actual chdir for us.
Thanks, I have some comments.
> diff --git a/gdb/NEWS b/gdb/NEWS
> index 549f511b29..c131713293 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -64,6 +64,9 @@ QStartupWithShell
>
> * New commands
>
> +set|show cwd
> + Set and show the current working directory for the inferior.
> +
> set|show compile-gcc
> Set and show compilation command used for compiling and injecting code
> with the 'compile' commands.
This part is OK.
> +@kindex set cwd
> +@cindex change inferior's working directory
> +@item set cwd @r{[}@var{directory}@r{]}
> +Set the inferior's working directory to @var{directory}. If not
> +given, @var{directory} uses @file{'~'}.
I think we should document here what does "~" mean on MS-Windows,
especially since, when HOME is not in the environment, Gnulib's glob
module doesn't behave according to MS platform recommendations (which
say not to create files directly below %HOMEDRIVE%%HOMEPATH%).
More generally, I think we should say here that the argument is
glob-expanded, because this is user-visible behavior (right?). Also,
how will TAB-completion react to input of this command? will it expand
the input typed so far?
> +@kindex show cwd
> +@cindex show inferior's working directory
> +@item show cwd
> +Show the inferior's working directory. If no directory has been
> +specified by @code{set cwd}, then the default inferior's working
> +directory is the same as @value{GDBN}'s working directory.
Does this show the original value typed by the user, or the expanded
value? E.g., if the user types "set cwd ~/foo", what will "show cwd"
display? If it shows the unexpanded form, does that mean the actual
cwd will change if, say, HOME changes?
Should we store the cwd after tilde-expansion?
> @@ -2461,6 +2462,7 @@ windows_create_inferior (struct target_ops *ops, const char *exec_file,
> BOOL ret;
> DWORD flags = 0;
> const char *inferior_io_terminal = get_inferior_io_terminal ();
> + const char *inferior_cwd = get_inferior_cwd ();
>
> if (!exec_file)
> error (_("No executable specified, use `target exec'."));
> @@ -2488,8 +2490,15 @@ windows_create_inferior (struct target_ops *ops, const char *exec_file,
> error (_("Error starting executable: %d"), errno);
> cygallargs = (wchar_t *) alloca (len * sizeof (wchar_t));
> mbstowcs (cygallargs, allargs, len);
> +
> + len = mbstowcs (NULL, inferior_cwd, 0) + 1;
> + if (len == (size_t) -1)
> + error (_("Invalid cwd for inferior: %d"), errno);
> + infcwd = (wchar_t *) alloca (len * sizeof (wchar_t));
> + mbstowcs (infcwd, inferior_cwd, len);
> #else /* !__USEWIDE */
> cygallargs = allargs;
> + infcwd = (cygwin_buf_t *) inferior_cwd;
> #endif
> }
> else
> @@ -2574,7 +2583,7 @@ windows_create_inferior (struct target_ops *ops, const char *exec_file,
> TRUE, /* inherit handles */
> flags, /* start flags */
> w32_env, /* environment */
> - NULL, /* current directory */
> + infcwd, /* current directory */
> &si,
> &pi);
> if (w32_env)
> @@ -2697,7 +2706,7 @@ windows_create_inferior (struct target_ops *ops, const char *exec_file,
> TRUE, /* inherit handles */
> flags, /* start flags */
> w32env, /* environment */
> - NULL, /* current directory */
> + inferior_cwd, /* current directory */
> &si,
> &pi);
> if (tty != INVALID_HANDLE_VALUE)
This seems to pass the unexpanded cwd directly to CreateProcess. I
don't think this will work on Windows, as this directory is not
interpreted by any shell, so "~" will cause errors. I think we should
pass this via gdb_tilde_expand, like we do in the Unix case, and I
also think we should mirror all the slashes in the result, just in
case.
next prev parent reply other threads:[~2017-09-22 8:03 UTC|newest]
Thread overview: 131+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-12 4:23 [PATCH 0/4] New "set cwd" command Sergio Durigan Junior
2017-09-12 4:23 ` [PATCH 3/4] Introduce gdb_chdir Sergio Durigan Junior
2017-09-12 14:53 ` Eli Zaretskii
2017-09-13 23:00 ` Sergio Durigan Junior
2017-09-13 16:07 ` Pedro Alves
2017-09-14 15:14 ` Sergio Durigan Junior
2017-09-14 15:23 ` Pedro Alves
2017-09-14 15:33 ` Sergio Durigan Junior
2017-09-12 4:23 ` [PATCH 1/4] Make gdb_dirbuf local to functions Sergio Durigan Junior
2017-09-13 15:12 ` Pedro Alves
2017-09-13 22:03 ` Sergio Durigan Junior
2017-09-13 22:19 ` Pedro Alves
2017-09-13 22:46 ` Sergio Durigan Junior
2017-09-13 23:47 ` Pedro Alves
2017-09-12 4:23 ` [PATCH 2/4] Import "glob" module from gnulib Sergio Durigan Junior
2017-09-12 4:23 ` [PATCH 4/4] Implement "set cwd" command Sergio Durigan Junior
2017-09-12 14:50 ` Eli Zaretskii
2017-09-12 14:55 ` [PATCH 0/4] New " Eli Zaretskii
2017-09-12 16:48 ` Sergio Durigan Junior
2017-09-12 16:57 ` Eli Zaretskii
2017-09-12 17:51 ` Sergio Durigan Junior
2017-09-13 15:00 ` Pedro Alves
2017-09-13 15:06 ` Eli Zaretskii
2017-09-13 21:56 ` Sergio Durigan Junior
2017-09-13 14:54 ` Pedro Alves
2017-09-13 21:54 ` Sergio Durigan Junior
2017-09-19 4:28 ` [PATCH v2 0/5] " Sergio Durigan Junior
2017-09-19 4:28 ` [PATCH v2 3/5] Introduce gdb_chdir Sergio Durigan Junior
2017-09-20 13:14 ` Pedro Alves
2017-09-20 17:25 ` Sergio Durigan Junior
2017-09-19 4:28 ` [PATCH v2 2/5] Get rid of "gdb_dirbuf" and use "getcwd (NULL, 0)" Sergio Durigan Junior
2017-09-20 12:24 ` Pedro Alves
2017-09-20 17:02 ` Sergio Durigan Junior
2017-09-19 4:28 ` [PATCH v2 4/5] Implement "set cwd" command Sergio Durigan Junior
2017-09-20 14:01 ` Pedro Alves
2017-09-20 23:08 ` Sergio Durigan Junior
2017-09-19 4:33 ` [PATCH v2 5/5] Extend "set cwd" to work on gdbserver Sergio Durigan Junior
2017-09-20 14:34 ` Pedro Alves
2017-09-20 23:49 ` Sergio Durigan Junior
2017-09-21 1:37 ` Sergio Durigan Junior
2017-09-22 10:47 ` Pedro Alves
2017-09-22 18:33 ` Sergio Durigan Junior
2017-09-27 13:28 ` Pedro Alves
2017-09-19 4:37 ` [PATCH v2 1/5] Import "glob" and "getcwd" modules from gnulib Sergio Durigan Junior
2017-09-20 12:17 ` Pedro Alves
2017-09-20 17:17 ` Sergio Durigan Junior
2017-09-20 17:33 ` Pedro Alves
2017-09-20 18:31 ` Sergio Durigan Junior
2017-09-20 20:30 ` Sergio Durigan Junior
2017-09-20 22:44 ` Pedro Alves
2017-09-20 23:12 ` Sergio Durigan Junior
2017-09-20 23:25 ` Pedro Alves
2017-09-21 22:59 ` New "set cwd" command Sergio Durigan Junior
2017-09-21 22:59 ` [PATCH v3 1/5] Import "glob" and "getcwd" modules from gnulib Sergio Durigan Junior
2017-09-22 11:01 ` Pedro Alves
2017-09-22 17:29 ` Sergio Durigan Junior
2017-09-21 22:59 ` [PATCH v3 4/5] Implement "set cwd" command on GDB Sergio Durigan Junior
2017-09-22 8:03 ` Eli Zaretskii [this message]
2017-09-22 12:31 ` Pedro Alves
2017-09-22 18:15 ` Sergio Durigan Junior
2017-09-22 18:00 ` Sergio Durigan Junior
2017-09-22 18:56 ` Eli Zaretskii
2017-09-22 19:24 ` Pedro Alves
2017-09-22 19:41 ` Eli Zaretskii
2017-09-22 20:27 ` Sergio Durigan Junior
2017-09-22 20:37 ` Pedro Alves
2017-09-23 5:55 ` Eli Zaretskii
2017-09-27 14:02 ` Pedro Alves
2017-09-29 15:31 ` Eli Zaretskii
2017-09-29 15:46 ` Pedro Alves
2017-09-29 17:51 ` Eli Zaretskii
2017-09-23 5:52 ` Eli Zaretskii
2017-09-22 20:24 ` Sergio Durigan Junior
2017-09-23 5:51 ` Eli Zaretskii
2017-09-22 20:55 ` Sergio Durigan Junior
2017-09-23 6:05 ` Eli Zaretskii
2017-09-23 17:01 ` Sergio Durigan Junior
2017-09-21 22:59 ` [PATCH v3 2/5] Get rid of "gdb_dirbuf" and use "getcwd (NULL, 0)" Sergio Durigan Junior
2017-09-22 11:19 ` Pedro Alves
2017-09-22 17:30 ` Sergio Durigan Junior
2017-09-21 22:59 ` [PATCH v3 3/5] Introduce gdb_tilde_expand Sergio Durigan Junior
2017-09-22 11:57 ` Pedro Alves
2017-09-22 17:37 ` Sergio Durigan Junior
2017-09-22 17:41 ` Pedro Alves
2017-09-22 18:07 ` Sergio Durigan Junior
2017-09-22 18:20 ` Pedro Alves
2017-09-22 18:22 ` Sergio Durigan Junior
2017-09-21 23:06 ` [PATCH v3 5/5] Extend "set cwd" to work on gdbserver Sergio Durigan Junior
2017-09-22 8:12 ` Eli Zaretskii
2017-09-22 18:46 ` Sergio Durigan Junior
2017-09-22 19:09 ` Eli Zaretskii
2017-09-22 20:47 ` Sergio Durigan Junior
2017-09-23 6:00 ` Eli Zaretskii
2017-09-27 14:42 ` Pedro Alves
2017-09-27 21:48 ` Sergio Durigan Junior
2017-09-29 14:03 ` Pedro Alves
2017-09-29 18:33 ` Sergio Durigan Junior
2017-09-28 4:10 ` [PATCH v4 0/3] New "set cwd" command Sergio Durigan Junior
2017-09-28 4:10 ` [PATCH v4 1/3] Introduce gdb_tilde_expand Sergio Durigan Junior
2017-09-29 14:08 ` Pedro Alves
2017-09-29 17:48 ` Sergio Durigan Junior
2017-09-28 4:11 ` [PATCH v4 2/3] Implement "set cwd" command on GDB Sergio Durigan Junior
2017-09-29 15:20 ` Pedro Alves
2017-09-29 18:31 ` Sergio Durigan Junior
2017-09-28 4:11 ` [PATCH v4 3/3] Extend "set cwd" to work on gdbserver Sergio Durigan Junior
2017-09-29 15:21 ` Pedro Alves
2017-09-29 18:48 ` Sergio Durigan Junior
2017-10-03 15:13 ` Pedro Alves
2017-09-29 22:58 ` [PATCH v5 0/3] New "set cwd" command Sergio Durigan Junior
2017-09-29 22:59 ` [PATCH v5 1/3] Introduce gdb_tilde_expand Sergio Durigan Junior
2017-10-03 15:15 ` Pedro Alves
2017-10-04 6:09 ` Sergio Durigan Junior
2017-09-29 22:59 ` [PATCH v5 3/3] Extend "set cwd" to work on gdbserver Sergio Durigan Junior
2017-10-03 15:15 ` Pedro Alves
2017-10-03 16:45 ` Sergio Durigan Junior
2017-10-04 6:09 ` Sergio Durigan Junior
2017-09-29 22:59 ` [PATCH v5 2/3] Implement "set cwd" command on GDB Sergio Durigan Junior
2017-10-03 15:15 ` Pedro Alves
2017-10-03 16:39 ` Sergio Durigan Junior
2017-10-03 16:44 ` Pedro Alves
2017-10-03 16:47 ` Sergio Durigan Junior
2017-10-03 16:58 ` Sergio Durigan Junior
2017-10-03 20:09 ` Sergio Durigan Junior
2017-10-03 21:29 ` Pedro Alves
2017-10-04 5:40 ` Eli Zaretskii
2017-10-04 6:10 ` Sergio Durigan Junior
2017-10-06 2:37 ` asmwarrior
2017-10-06 10:54 ` [pushed] Fix GDB build under msys+mingw gcc 32bit (Re: [PATCH v5 2/3] Implement "set cwd" command on GDB) Pedro Alves
2017-10-06 11:06 ` [pushed] Fix more GDB build breakage on mingw32 " Pedro Alves
2017-10-06 11:15 ` asmwarrior
2017-10-09 21:58 ` Sergio Durigan Junior
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=83poajcg9a.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
--cc=palves@redhat.com \
--cc=sergiodj@redhat.com \
/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