From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 130651 invoked by alias); 22 Sep 2017 08:12:37 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 130442 invoked by uid 89); 22 Sep 2017 08:12:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.6 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: eggs.gnu.org Received: from eggs.gnu.org (HELO eggs.gnu.org) (208.118.235.92) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 22 Sep 2017 08:12:34 +0000 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dvJ4Y-0007Hk-Mh for gdb-patches@sourceware.org; Fri, 22 Sep 2017 04:12:32 -0400 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:50604) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvJ4R-0007Ez-VG; Fri, 22 Sep 2017 04:12:24 -0400 Received: from 84.94.185.246.cable.012.net.il ([84.94.185.246]:3545 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1dvJ4R-0000Zx-DE; Fri, 22 Sep 2017 04:12:23 -0400 Date: Fri, 22 Sep 2017 08:12:00 -0000 Message-Id: <83o9q3cftp.fsf@gnu.org> From: Eli Zaretskii To: Sergio Durigan Junior CC: gdb-patches@sourceware.org, palves@redhat.com In-reply-to: <20170921225926.23132-6-sergiodj@redhat.com> (message from Sergio Durigan Junior on Thu, 21 Sep 2017 18:59:26 -0400) Subject: Re: [PATCH v3 5/5] Extend "set cwd" to work on gdbserver Reply-to: Eli Zaretskii References: <20170912042325.14927-1-sergiodj@redhat.com> <20170921225926.23132-1-sergiodj@redhat.com> <20170921225926.23132-6-sergiodj@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-IsSubscribed: yes X-SW-Source: 2017-09/txt/msg00665.txt.bz2 > From: Sergio Durigan Junior > Cc: Pedro Alves , Sergio Durigan Junior > 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 > ), > 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.