From patchwork Tue Mar 17 11:04:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gary Benson X-Patchwork-Id: 5645 Received: (qmail 110302 invoked by alias); 17 Mar 2015 11:04:14 -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 110286 invoked by uid 89); 17 Mar 2015 11:04:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 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, 17 Mar 2015 11:04:12 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t2HB4B64007521 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 17 Mar 2015 07:04:11 -0400 Received: from blade.nx (ovpn-116-79.ams2.redhat.com [10.36.116.79]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t2HB4A0o011038 for ; Tue, 17 Mar 2015 07:04:10 -0400 Received: from blade.nx (localhost [127.0.0.1]) by blade.nx (Postfix) with ESMTP id 84F85265072 for ; Tue, 17 Mar 2015 11:04:09 +0000 (GMT) From: Gary Benson To: gdb-patches@sourceware.org Subject: [PATCH] Reimplement "vFile:fstat" without qSupported Date: Tue, 17 Mar 2015 11:04:08 +0000 Message-Id: <1426590248-20310-1-git-send-email-gbenson@redhat.com> X-IsSubscribed: yes Hi all, When I implemented the vFile:fstat packet the other week I didn't understand how support for the other vFile packets was negotiated. I implemented it using qSupported to indicate support, which means the vFile:fstat packet is handled differently from all other vFile packets--and for no good reason. This commit makes support for the vFile:fstat packet be determined by probing rather than using qSupported. This makes it consistent with all other vFile packets. Built and regtested on RHEL 6.6 x86_64. Ok to commit? Thanks, Gary --- gdb/ChangeLog: (remote_protocol_features): Remove the "vFile:fstat" feature. (remote_hostio_fstat): Probe for "vFile:fstat" support. gdb/doc/ChangeLog: * gdb.texinfo (General Query Packets): Remove documentation for now-removed vFile:fstat qSupported features. gdb/gdbserver/ChangeLog: * server.c (handle_query): Do not report vFile:fstat as supported. --- gdb/ChangeLog | 5 +++++ gdb/doc/ChangeLog | 5 +++++ gdb/doc/gdb.texinfo | 12 ------------ gdb/gdbserver/ChangeLog | 5 ++++- gdb/gdbserver/server.c | 2 -- gdb/remote.c | 24 +++++++++++------------- 6 files changed, 25 insertions(+), 28 deletions(-) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 9e71642..552da31 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -36062,11 +36062,6 @@ These are the currently defined stub features and their properties: @tab @samp{-} @tab No -@item @samp{vFile:fstat} -@tab No -@tab @samp{-} -@tab No - @end multitable These are the currently defined stub features, in more detail: @@ -36255,9 +36250,6 @@ breakpoints. The remote stub reports the @samp{hwbreak} stop reason for hardware breakpoints. -@item vFile:fstat -The remote stub understands the @samp{vFile:fstat} packet. - @end table @item qSymbol:: @@ -37426,10 +37418,6 @@ and the return value is the size of this attachment in bytes. If an error occurs the return value is -1. The format of the returned binary attachment is as described in @ref{struct stat}. -This packet is not probed by default; the remote stub must request -it, by supplying an appropriate @samp{qSupported} response -(@pxref{qSupported}). - @item vFile:unlink: @var{filename} Delete the file at @var{filename} on the target. Return 0, or -1 if an error occurs. The @var{filename} is a string. diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 9ff2f8e..08dbb60 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -2082,8 +2082,6 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p) if (target_supports_stopped_by_hw_breakpoint ()) strcat (own_buf, ";hwbreak+"); - strcat (own_buf, ";vFile:fstat+"); - return; } diff --git a/gdb/remote.c b/gdb/remote.c index 9aaee13..dfa68b3 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -4049,8 +4049,6 @@ static const struct protocol_feature remote_protocol_features[] = { PACKET_Qbtrace_conf_bts_size }, { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature }, { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature }, - { "vFile:fstat", PACKET_DISABLE, remote_supported_packet, - PACKET_vFile_fstat }, }; static char *remote_support_xml; @@ -10084,8 +10082,18 @@ remote_hostio_fstat (struct target_ops *self, struct fio_stat fst; int read_len; - if (packet_support (PACKET_vFile_fstat) != PACKET_ENABLE) + remote_buffer_add_string (&p, &left, "vFile:fstat:"); + + remote_buffer_add_int (&p, &left, fd); + + ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat, + remote_errno, &attachment, + &attachment_len); + if (ret < 0) { + if (*remote_errno != FILEIO_ENOSYS) + return ret; + /* Strictly we should return -1, ENOSYS here, but when "set sysroot remote:" was implemented in August 2008 BFD's need for a stat function was sidestepped with @@ -10104,16 +10112,6 @@ remote_hostio_fstat (struct target_ops *self, return 0; } - remote_buffer_add_string (&p, &left, "vFile:fstat:"); - - remote_buffer_add_int (&p, &left, fd); - - ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat, - remote_errno, &attachment, - &attachment_len); - if (ret < 0) - return ret; - read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len, (gdb_byte *) &fst, sizeof (fst));