From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id D2BE6385DC1B for ; Thu, 7 May 2020 22:09:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org D2BE6385DC1B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark@simark.ca Received: from [10.0.0.193] (unknown [192.222.164.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 009C51E79B; Thu, 7 May 2020 18:09:26 -0400 (EDT) Subject: Re: [PATCH 3/4] [PR gdbserver/25893]: Use construct_inferior_arguments which handles special chars From: Simon Marchi To: Michael Weghorn , gdb-patches@sourceware.org References: <20200429111638.1327262-1-m.weghorn@posteo.de> <20200429111638.1327262-5-m.weghorn@posteo.de> <17f345c8-eb7f-a3bb-c133-98533c7fa1c5@simark.ca> Message-ID: Date: Thu, 7 May 2020 18:09:26 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <17f345c8-eb7f-a3bb-c133-98533c7fa1c5@simark.ca> Content-Type: text/plain; charset=utf-8 Content-Language: tl Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 May 2020 22:09:30 -0000 On 2020-05-07 4:09 p.m., Simon Marchi wrote: > On 2020-04-29 7:16 a.m., Michael Weghorn via Gdb-patches wrote: >> Use the construct_inferior_arguments function instead of >> stringify_argv to construct a string from the program >> arguments in those places where that one is then passed >> to fork_inferior, since construct_inferior_arguments >> properly takes care of special characters, while >> stringify_argv does not. >> Using construct_inferior_arguments seems "natural", since its >> documentation also mentions that it "does the >> same shell processing as fork_inferior". >> >> This makes gdbserver properly handle program args containing special >> characters, e.g. (example from PR25893) >> >> $ gdbserver localhost:50505 myprogram "hello world" >> >> now properly handles "hello world" as a single arg, not two separate >> ones ("hello", "world"). >> >> I'm not sure regarding the two remaining uses of function stringify_argv >> (in win32_process_target::create_inferior and >> nto_process_target::create_inferior) whose result is not passed to >> fork_inferior and don't know how the arg processing in the creation >> of processes on those targets exactly works, so left them unchanged >> for now. > > I'd say, do the change the best you can for win32 and nto. We'll be > able to test win32. Regarding nto, it hasn't seen patches for years, > it most likely doesn't even build. And the toolchain not being easily > available, we can't do much about it. I think we should actually > consider removing this port, unless somebody steps up to maintain it. > Same for lynx. > > This will allow removing stringify_argv, and avoid having duplicate > broken functionality of construct_inferior_arguments. While trying out stuff to review patch 4, I noticed a crash introduced by this patch. In one terminal, run gdbserver with: $ ./gdbserver --once --multi :1234 In another, run GDB with: $ ./gdb /bin/ls -ex 'set pagination off' -ex 'set remote exec-file /bin/ls' -ex 'target extended-remote :1234' -ex 'run hello' Doing so segfaults gdbserver for me. Could you look into it? The commands above try to run a new process through gdbserver. The args are passed to GDB using the remote protocol. You can add -ex 'set debug remote 1' before the run part to see the exchanged packets, the args are hex-encoded in the vRun packet. Simon