From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31290 invoked by alias); 9 Feb 2012 19:55:52 -0000 Received: (qmail 31279 invoked by uid 22791); 9 Feb 2012 19:55:50 -0000 X-SWARE-Spam-Status: No, hits=-6.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,TW_AQ,TW_QN,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 09 Feb 2012 19:55:37 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q19JtYjK030368 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 9 Feb 2012 14:55:34 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q19JtW2t020842; Thu, 9 Feb 2012 14:55:33 -0500 Message-ID: <4F3424B4.9010508@redhat.com> Date: Thu, 09 Feb 2012 19:55:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20120131 Thunderbird/10.0 MIME-Version: 1.0 To: Yao Qi CC: gdb-patches@sourceware.org Subject: Re: [patch 4/8] `use_agent' for remote and QAgent References: <4F1D55D7.7030506@codesourcery.com> <4F1D666E.4010204@codesourcery.com> In-Reply-To: <4F1D666E.4010204@codesourcery.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 X-SW-Source: 2012-02/txt/msg00160.txt.bz2 On 01/23/2012 01:53 PM, Yao Qi wrote: > This patch is to implement the to_use_agent in target_ops in remote > target. A new packet `QAgent' is added to set the flag in remote stub. > > -- Yao (齐尧) > > > 0004-impl-of-to_use_agent-for-remote.patch > > > gdb: > > 2012-01-23 Yao Qi > > * remote.c (remote_use_agent): New. > (init_remote_ops): Install `remote_use_agent'. > > gdb/gdbserver: > > 2012-01-23 Yao Qi > > * server.c (handle_general_set): Handle packet 'QAgent'. > > gdb/doc: > > 2012-01-23 Yao Qi > > * gdb.texinfo (General Query Packets): Add packet `QAgent'. > --- > gdb/doc/gdb.texinfo | 12 ++++++++++++ > gdb/gdbserver/server.c | 26 ++++++++++++++++++++++++++ > gdb/remote.c | 18 ++++++++++++++++++ > 3 files changed, 56 insertions(+), 0 deletions(-) > > diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo > index 49db189..c4763d4 100644 > --- a/gdb/doc/gdb.texinfo > +++ b/gdb/doc/gdb.texinfo > @@ -34486,6 +34486,10 @@ Here are the currently defined query and set packets: > > @table @samp > > +@item QAgent:1 > +@item QAgent:0 > +Turn on or off agent as a helper. > + > @item QAllow:@var{op}:@var{val}@dots{} > @cindex @samp{QAllow} packet > Specify which operations @value{GDBN} expects to request of the > @@ -35065,6 +35069,11 @@ These are the currently defined stub features and their properties: > @tab @samp{-} > @tab No > > +@item @samp{QAgent} > +@tab No > +@tab @samp{-} > +@tab No > + > @item @samp{QAllow} > @tab No > @tab @samp{-} > @@ -35198,6 +35207,9 @@ The remote stub accepts and implements the reverse step packet > The remote stub understands the @samp{QTDPsrc} packet that supplies > the source form of tracepoint definitions. > > +@item QAgent > +The remote stub understaqnds the @samp{QAgent} packet. > + > @item QAllow > The remote stub understands the @samp{QAllow} packet. > > diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c > index bebccf5..a5e5bbb 100644 > --- a/gdb/gdbserver/server.c > +++ b/gdb/gdbserver/server.c > @@ -424,6 +424,8 @@ write_qxfer_response (char *buf, const void *data, int len, int is_more) > PBUFSIZ - 2) + 1; > } > > +extern int use_agent; Wasn't this declared in some header? > + > /* Handle all of the extended 'Q' packets. */ > > static void > @@ -529,6 +531,30 @@ handle_general_set (char *own_buf) > && handle_tracepoint_general_set (own_buf)) > return; > > + if (strncmp ("QAgent:", own_buf, strlen ("QAgent:")) == 0) > + { > + char *mode = own_buf + strlen ("QAgent:"); > + int req = 0; > + > + if (strcmp (mode, "0") == 0) > + req = 0; > + else if (strcmp (mode, "1") == 0) > + req = 1; > + else > + { > + /* We don't know what this value is, so complain to GDB. */ > + fprintf (stderr, "Unknown QAgent value requested: %s\n", own_buf); > + write_enn (own_buf); You can't send the error message back to gdb, with the E.foo form. WDYT? > + return; > + } > + > + /* Update the flag. */ > + use_agent = req; > + if (remote_debug) > + fprintf (stderr, "[%s agent]\n", req ? "Enable" : "Disable"); > + write_ok (own_buf); > + } > + > /* Otherwise we didn't know what packet it was. Say we didn't > understand it. */ > own_buf[0] = 0; > diff --git a/gdb/remote.c b/gdb/remote.c > index 60d7ecd..50bb90a 100644 > --- a/gdb/remote.c > +++ b/gdb/remote.c > @@ -10581,6 +10581,23 @@ remote_set_trace_notes (char *user, char *notes, char *stop_notes) > return 1; > } > > +extern int use_agent; Likewise. > + > +static int > +remote_use_agent (int use) > +{ > + struct remote_state *rs = get_remote_state (); > + > + sprintf (rs->buf, "QAgent:%d", use); > + putpkt (rs->buf); > + getpkt (&rs->buf, &rs->buf_size, 0); > + > + if (strcmp (rs->buf, "OK") == 0) > + use_agent = use; > + > + return use_agent; > +} So what is supposed to happen if you do "set agent on" and the remote errors, or doesn't support the packet? At least errors should be handled. Please consider what happens to the command's setting in those cases as well. > + > static void > init_remote_ops (void) > { > @@ -10684,6 +10701,7 @@ Specify the serial device it is connected to\n\ > remote_ops.to_static_tracepoint_markers_by_strid > = remote_static_tracepoint_markers_by_strid; > remote_ops.to_traceframe_info = remote_traceframe_info; > + remote_ops.to_use_agent = remote_use_agent; > } > > /* Set up the extended remote vector by making a copy of the standard > -- 1.7.0.4 -- Pedro Alves