Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: markus.t.metzger@intel.com
Cc: jan.kratochvil@redhat.com, gdb-patches@sourceware.org,
	       markus.t.metzger@gmail.com
Subject: Re: [rfc] remote, btrace: add branch tracing protocol to Qbtrace packet
Date: Mon, 25 Feb 2013 20:33:00 -0000	[thread overview]
Message-ID: <512BCA6D.6050909@redhat.com> (raw)
In-Reply-To: <1361546562-26827-1-git-send-email-markus.t.metzger@intel.com>

On 02/22/2013 03:22 PM, markus.t.metzger@intel.com wrote:
> From: Markus Metzger <markus.t.metzger@intel.com>
> 
> We might want to add support for LBR branch tracing in the future.
> 
> To prepare for this, I would specify the branch trace recording method
> in the Qbtrace packet when requesting branch tracing.
> 
> The supported branch trace recording methods will further be listed
> in response to a QSupported packet.
> 
> The patch works but I'm not sure whether it is in the spirit of
> the remote serial protocol.

I'm not sure I have a definite answer.  I'll just shoot some
answers/questions, and let's see if we can converse on something.

Hmm:

   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace],
-       "Qbtrace", "enable-btrace", 0);
+       "Qbtrace:bts", "enable-btrace", 0);

How would you change this when another method in addition to bts
is added?

What if a remote stub sends in "Qbtrace:foo", but no mention of
bts?  The remote understands "Qbtrace:off", but this does not
express that.

> 
> 
> This patch does not enable GDB to support different recording methods.
> GDB still only supports BTS-based branch trace recording.
> 
> But I hope this will avoid having to change the remote serial protocol
> later on when we want to add the new recording method.
> 
> 
> 2013-02-22 Markus Metzger  <markus.t.metzger@intel.com>

Double space after date too.

> ---
>  gdb/doc/gdb.texinfo    |   10 +++++++---
>  gdb/gdbserver/server.c |    6 +++---
>  gdb/remote.c           |    4 ++--
>  3 files changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index d6842f1..ec934a5 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -37570,7 +37570,10 @@ rather than reporting the hit to @value{GDBN}.
>  The remote stub understands the @samp{qbtrace} packet.
>  
>  @item Qbtrace
> -The remote stub understands the @samp{Qbtrace} packet.
> +The remote stub understands the @samp{Qbtrace} packet.  The branch
> +trace recording method will be specified after the packet name
> +separated by a single colon (@code{:}).  There will be one entry for
> +each supported branch trace recording method.

How are the multiple supported methods separated?

I think s/will be/is/ is better in the manual.

Hmm, I think the user reading this is left wondering what
exactly are the supported methods.

qSupported already has a way of passing arguments:

@table @samp
@item @var{name}=@var{value}
The remote protocol feature @var{name} is supported, and associated
with the specified @var{value}.  The format of @var{value} depends
on the feature, but it must not include a semicolon.
@item @var{name}+

So, that'd be, e.g.:

 Qbtrace=bts,foo,bar

An existing feature that supports multiple values is:

 @item xmlRegisters
 This feature indicates that @value{GDBN} supports the XML target
 description.  If the stub sees @samp{xmlRegisters=} with target
 specific strings separated by a comma, it will report register
 description.

>  
>  @end table
>  
> @@ -37951,8 +37954,9 @@ No new branch trace data is available.
>  A badly formed request or an error was encountered.
>  @end table
>  
> -@item Qbtrace:on
> -Enable branch tracing for the current thread.
> +@item Qbtrace:@var{method}
> +Enable branch tracing for the current thread using the @var{method}
> +branch trace recording method.

I think a mention / cross reference to the corresponding qSupported
packet description would be nice.

>  
>  Reply:
>  @table @samp
> diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
> index c335af7..debef5d 100644
> --- a/gdb/gdbserver/server.c
> +++ b/gdb/gdbserver/server.c
> @@ -463,12 +463,12 @@ handle_btrace_general_set (char *own_buf)
>  
>    err = NULL;
>  
> -  if (strcmp (op, "on") == 0)
> +  if (strcmp (op, "bts") == 0)
>      err = handle_btrace_enable (thread);
>    else if (strcmp (op, "off") == 0)
>      err = handle_btrace_disable (thread);
>    else
> -    err = "E.Bad Qbtrace operation. Use on or off.";
> +    err = "E.Bad Qbtrace operation. Use bts or off.";
>  
>    if (err != 0)
>      strcpy (own_buf, err);
> @@ -1828,7 +1828,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
>        if (target_supports_btrace ())
>  	{
>  	  strcat (own_buf, ";qbtrace+");
> -	  strcat (own_buf, ";Qbtrace+");
> +	  strcat (own_buf, ";Qbtrace:bts+");
>  	  strcat (own_buf, ";qXfer:btrace:read+");
>  	}
>  
> diff --git a/gdb/remote.c b/gdb/remote.c
> index 6f95125..2322ece 100755
> --- a/gdb/remote.c
> +++ b/gdb/remote.c
> @@ -11164,7 +11164,7 @@ send_Qbtrace (ptid_t ptid, int enable)
>    set_general_thread (ptid);
>  
>    buf += xsnprintf (buf, endbuf - buf, "%s:", packet->name);
> -  buf += xsnprintf (buf, endbuf - buf, enable ? "on" : "off");
> +  buf += xsnprintf (buf, endbuf - buf, enable ? "bts" : "off");
>    putpkt (rs->buf);
>    getpkt (&rs->buf, &rs->buf_size, 0);
>  
> @@ -11928,7 +11928,7 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
>         "qbtrace", "query-btrace", 0);
>  
>    add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace],
> -       "Qbtrace", "enable-btrace", 0);
> +       "Qbtrace:bts", "enable-btrace", 0);
>  
>    add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
>         "qXfer:btrace", "read-btrace", 0);
> 


-- 
Pedro Alves


  parent reply	other threads:[~2013-02-25 20:33 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-22 15:23 markus.t.metzger
2013-02-22 15:51 ` Eli Zaretskii
2013-02-25  8:51   ` Metzger, Markus T
2013-02-25  9:08     ` Jan Kratochvil
2013-02-25  9:13 ` FW: " Metzger, Markus T
2013-02-25 20:33 ` Pedro Alves [this message]
2013-02-26  9:24   ` Metzger, Markus T
2013-02-27 16:48     ` Jan Kratochvil
2013-02-28  9:19       ` Metzger, Markus T
2013-02-28 11:31         ` Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=512BCA6D.6050909@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=markus.t.metzger@gmail.com \
    --cc=markus.t.metzger@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox