Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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 5/5] Extend "set cwd" to work on gdbserver
Date: Fri, 22 Sep 2017 08:12:00 -0000	[thread overview]
Message-ID: <83o9q3cftp.fsf@gnu.org> (raw)
In-Reply-To: <20170921225926.23132-6-sergiodj@redhat.com> (message from Sergio	Durigan Junior on Thu, 21 Sep 2017 18:59:26 -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:26 -0400
> 
> This is the "natural" extension necessary for the "set cwd" command
> (and the whole "set the inferior's cwd" logic) to work on gdbserver.
> 
> The idea here is to have a new remote packet, QSetWorkingDir (name
> adopted from LLDB's extension to the RSP, as can be seen at
> <https://raw.githubusercontent.com/llvm-mirror/lldb/master/docs/lldb-gdb-remote.txt>),
> which sends an hex-encoded string representing the working directory
> that gdbserver is supposed to cd into before executing the inferior.
> The good thing is that since this feature is already implemented on
> nat/fork-inferior.c, all gdbserver has to do is to basically implement
> "set_inferior_cwd" and call it whenever such packet arrives.

This once again raises the issue of whether to send expanded or
unexpanded directory down the wire, and if unexpanded, then what is
the meaning of the default "~" in the inferior.

> diff --git a/gdb/NEWS b/gdb/NEWS
> index c131713293..4ac340eeb5 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -23,6 +23,14 @@
>  
>  * New features in the GDB remote stub, GDBserver
>  
> +  ** GDBserver is now able to set the inferior's current working
> +     directory.
> +
> +     The user can set the desired working directory to be used by the
> +     remote inferior on GDB, using the new "set cwd" command, which
> +     will instruct GDB to tell GDBserver about this directory change
> +     the next time an inferior is run.
> +
>    ** New "--selftest" command line option runs some GDBserver self
>       tests.  These self tests are disabled in releases.
>  
> @@ -56,6 +64,10 @@ QEnvironmentReset
>  QStartupWithShell
>    Indicates whether the inferior must be started with a shell or not.
>  
> +QSetWorkingDir
> +  Tell GDBserver that the inferior to be started should use a specific
> +  working directory.
> +
>  * The "maintenance print c-tdesc" command now takes an optional
>    argument which is the file name of XML target description.

This part is OK.

> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index 899afb92b6..7434de2a68 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo

OK for this part.

> +  if (inferior_cwd != NULL)
> +    {
> +      size_t cwdlen = strlen (inferior_cwd);
> +
> +      wcwd = alloca ((cwdlen + 1) * sizeof (wchar_t));
> +      mbstowcs (wcwd, inferior_cwd, cwdlen + 1);
> +    }

no error checking of the mbstowcs conversion?

>    ret = CreateProcessW (wprogram, /* image name */
>  			wargs,    /* command line */
>  			NULL,     /* security, not supported */
> @@ -586,7 +595,7 @@ create_process (const char *program, char *args,
>  			FALSE,    /* inherit handles, not supported */
>  			flags,    /* start flags */
>  			NULL,     /* environment, not supported */
> -			NULL,     /* current directory, not supported */
> +			wcwd,     /* current directory */
>  			NULL,     /* start info, not supported */
>  			pi);      /* proc info */
>  #else
> @@ -599,7 +608,7 @@ create_process (const char *program, char *args,
>  			TRUE,     /* inherit handles */
>  			flags,    /* start flags */
>  			NULL,     /* environment */
> -			NULL,     /* current directory */
> +			inferior_cwd,     /* current directory */
>  			&si,      /* start info */
>  			pi);      /* proc info */

Once again, this feeds CreateProcess with an unexpanded directory,
which AFAIU will not work if the directory includes "~".

> +static void
> +extended_remote_set_inferior_cwd (struct remote_state *rs)
> +{
> +  if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
> +    {
> +      const char *inferior_cwd = get_inferior_cwd ();
> +
> +      if (inferior_cwd != NULL)
> +	{
> +	  std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
> +					 strlen (inferior_cwd));
> +

Shouldn't this do some encoding conversion, from the GDB charset to
the target charset, before encoding in hex?

Thanks.


  reply	other threads:[~2017-09-22  8:12 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 4/4] Implement " Sergio Durigan Junior
2017-09-12 14:50   ` Eli Zaretskii
2017-09-12  4:23 ` [PATCH 2/4] Import "glob" module from gnulib 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 14:55 ` [PATCH 0/4] New "set cwd" command 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 4/5] Implement " Sergio Durigan Junior
2017-09-20 14:01     ` Pedro Alves
2017-09-20 23:08       ` 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: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 4/5] Implement "set cwd" command on GDB Sergio Durigan Junior
2017-09-22  8:03     ` Eli Zaretskii
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 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 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 [this message]
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 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-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-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=83o9q3cftp.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