From patchwork Tue Apr 26 21:29:23 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kratochvil X-Patchwork-Id: 11893 Received: (qmail 99184 invoked by alias); 26 Apr 2016 21:29:42 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 99052 invoked by uid 89); 26 Apr 2016 21:29:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=packets, Detect, notifications, Hx-languages-length:3440 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 26 Apr 2016 21:29:31 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1223D62654 for ; Tue, 26 Apr 2016 21:29:30 +0000 (UTC) Received: from host1.jankratochvil.net (ovpn-116-59.ams2.redhat.com [10.36.116.59]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u3QLTOvB030061 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 26 Apr 2016 17:29:27 -0400 Date: Tue, 26 Apr 2016 23:29:23 +0200 From: Jan Kratochvil To: Pedro Alves Cc: gdb-patches@sourceware.org, Gary Benson Subject: [patchv5] Workaround gdbserver<7.7 for setfs Message-ID: <20160426212923.GA20994@host1.jankratochvil.net> References: <20160323211547.GA17400@host1.jankratochvil.net> <20160324220933.GA27445@host1.jankratochvil.net> <20160324223241.GB2548@host1.jankratochvil.net> <56FBDFE7.90203@redhat.com> <20160404211406.GA32241@host1.jankratochvil.net> <5703E7FF.6060304@redhat.com> <20160406134911.GA30545@host1.jankratochvil.net> <57051DAB.7000008@redhat.com> <20160406151925.GA17174@host1.jankratochvil.net> <20160406190905.GA16036@host1.jankratochvil.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20160406190905.GA16036@host1.jankratochvil.net> User-Agent: Mutt/1.5.24 (2015-08-30) X-IsSubscribed: yes Hi Pedro, On Wed, 06 Apr 2016 21:09:05 +0200, Jan Kratochvil wrote: > it no longer transferred any files with old gdbserver after this commit. > (I do not have setup a regression testsuite for old gdbserver.) > > Therefore reverting it posting a new implementation based on Pedro's off-list comment: hmm. guess we could still salvage it, by 1) still doing the detection early; 2) accept OK as "unsupported" in setfs only? OK for check-in? Thanks, Jan With current FSF GDB HEAD and old FSF gdbserver I expected I could do: gdb -ex 'file target:/root/redhat/threadit' -ex 'target remote :1234' (supplying that unsupported qXfer:exec-file:read by "file") But that does not work because: Sending packet: $vFile:setfs:0#bf...Packet received: OK Packet vFile:setfs (hostio-setfs) is supported ... Sending packet: $vFile:setfs:104#24...Packet received: OK "target:/root/redhat/threadit": could not open as an executable file: Invalid argument GDB documentation says: The valid responses to Host I/O packets are: An empty response indicates that this operation is not recognized. This "empty response" vs. "OK" was a bug in gdbserver < 7.7. It was fixed by: commit e7f0d979dd5cc4f8b658df892e93db69d6d660b7 Author: Yao Qi Date: Tue Dec 10 21:59:20 2013 +0800 Fix a bug in matching notifications. Message-ID: <1386684626-11415-1-git-send-email-yao@codesourcery.com> https://sourceware.org/ml/gdb-patches/2013-12/msg00373.html 2013-12-10 Yao Qi * notif.c (handle_notif_ack): Return 0 if no notification matches. with unpatched old FSF gdbserver and patched FSF GDB HEAD: gdb -ex 'file target:/root/redhat/threadit' -ex 'target remote :1234' Sending packet: $vFile:setfs:0#bf...Packet received: OK Packet vFile:setfs (hostio-setfs) is NOT supported ... (gdb) info sharedlibrary From To Syms Read Shared Object Library 0x00007ffff7ddbae0 0x00007ffff7df627a Yes (*) target:/lib64/ld-linux-x86-64.so.2 0x00007ffff7bc48a0 0x00007ffff7bcf514 Yes (*) target:/lib64/libpthread.so.0 gdb/ChangeLog 2016-04-26 Jan Kratochvil * remote.c (remote_start_remote): Detect PACKET_vFile_setfs.support. diff --git a/gdb/remote.c b/gdb/remote.c index e5bf15d..a9b7201 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -4031,6 +4031,25 @@ remote_start_remote (int from_tty, struct target_ops *target, int extended_p) if (packet_support (PACKET_QAllow) != PACKET_DISABLE) remote_set_permissions (target); + /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any + unknown 'v' packet with string "OK". "OK" gets interpreted by GDB + as a reply to known packet. For packet "vFile:setfs:" it is an + invalid reply and GDB would return error in + remote_hostio_set_filesystem, making remote files access impossible. + Disable "vFile:setfs:" in such case. Do not disable other 'v' packets as + other "vFile" packets get correctly detected even on gdbserver < 7.7. */ + { + const char v_mustreplyempty[] = "vMustReplyEmpty"; + + putpkt (v_mustreplyempty); + getpkt (&rs->buf, &rs->buf_size, 0); + if (strcmp (rs->buf, "OK") == 0) + remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE; + else if (strcmp (rs->buf, "") != 0) + error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty, + rs->buf); + } + /* Next, we possibly activate noack mode. If the QStartNoAckMode packet configuration is set to AUTO,