Stop sending qTStatus if the target doesn't recognize it; add packet configuration...
authorPedro Alves <palves@redhat.com>
Thu, 28 Mar 2013 21:58:03 +0000 (21:58 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 28 Mar 2013 21:58:03 +0000 (21:58 +0000)
GDB currently sends a qTStatus even if the target previously replied
an empty packet to a previous qTStatus.  If the target doesn't
recognize the packet, there's no point in trying again.

The machinery we have in place is packet_ok, which has the nice side
effect of forcing one to install a configuration command/knob for the
packet in question, which is often handy when you need to debug
things, and/or emulate a target that doesn't support the packet, or even,
it can be used as workaround for the old broken kgdb's that return error
to qTSTatus instead of an empty packet.

gdb/
2013-03-28  Pedro Alves  <palves@redhat.com>

* NEWS (New options): New section.
(New options): Mention set/show remote trace-status-packet.
* remote.c (PACKET_qTStatus): New enumeration value.
(remote_get_trace_status): Skip sending qTStatus if the packet is
disabled.  Use packet_ok.
(_initialize_remote): Register a configuration command for
qTStatus packet.

gdb/doc/
2013-03-28  Pedro Alves  <palves@redhat.com>

* gdb.texinfo (Remote Configuration) <set remote @var{name}-packet
table>: Add entry for "trace-status".

gdb/ChangeLog
gdb/NEWS
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/remote.c

index f8c393b9b5b8e6b888e8478a54fd5c12baebb558..8b3f369180a93b7997f3f4cac51bed1903d76911 100644 (file)
@@ -1,3 +1,13 @@
+2013-03-28  Pedro Alves  <palves@redhat.com>
+
+       * NEWS (New options): New section.
+       (New options): Mention set/show remote trace-status-packet.
+       * remote.c (PACKET_qTStatus): New enumeration value.
+       (remote_get_trace_status): Skip sending qTStatus if the packet is
+       disabled.  Use packet_ok.
+       (_initialize_remote): Register a configuration command for
+       qTStatus packet.
+
 2013-03-28  Doug Evans  <dje@google.com>
 
        * symfile.c (find_separate_debug_file): Add comment.
index 77a27f78dca00d3e83c6181bd0eb9eba78d97ba2..56b68d8272a92eab223be2d46b4dd33304ac680c 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -10,6 +10,12 @@ maint set|show per-command time
 maint set|show per-command symtab
   Enable display of per-command gdb resource usage.
 
+* New options
+
+set remote trace-status-packet
+show remote trace-status-packet
+  Set/show the use of remote protocol qTStatus packet.
+
 * The command 'tsave' can now support new option '-ctf' to save trace
   buffer in Common Trace Format.
 
index 31593d4f4b368828063fb8a1ccc1a992483af8cd..8402495b4a1db2ff43a8373610cb49ae69e163c1 100644 (file)
@@ -1,3 +1,8 @@
+2013-03-28  Pedro Alves  <palves@redhat.com>
+
+       * gdb.texinfo (Remote Configuration) <set remote @var{name}-packet
+       table>: Add entry for "trace-status".
+
 2013-03-28  Eli Zaretskii  <eliz@gnu.org>
 
        * gdb.texinfo (Maintenance Commands): Use @enumerate, not "@table
index dec27a82bed7bf815db5102667111cb3a753b0f8..3b63d015e69c74d67687fc32e6e8a1ccdbae6e80 100644 (file)
@@ -18445,6 +18445,10 @@ are:
 @tab @code{qAttached}
 @tab Querying remote process attach state.
 
+@item @code{trace-status}
+@tab @code{qTStatus}
+@tab @code{tstatus}
+
 @item @code{traceframe-info}
 @tab @code{qXfer:traceframe-info:read}
 @tab Traceframe info
index 865995378d70a55187e002fc64bedff11ffa94b5..b8a7a1af0e62cbf23681379ecc80ca8ecb0470c0 100644 (file)
@@ -1256,6 +1256,7 @@ enum {
   PACKET_qGetTIBAddr,
   PACKET_qGetTLSAddr,
   PACKET_qSupported,
+  PACKET_qTStatus,
   PACKET_QPassSignals,
   PACKET_QProgramSignals,
   PACKET_qSearch_memory,
@@ -10689,6 +10690,10 @@ remote_get_trace_status (struct trace_status *ts)
   /* FIXME we need to get register block size some other way.  */
   extern int trace_regblock_size;
   volatile struct gdb_exception ex;
+  enum packet_result result;
+
+  if (remote_protocol_packets[PACKET_qTStatus].support == PACKET_DISABLE)
+    return -1;
 
   trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
 
@@ -10707,8 +10712,10 @@ remote_get_trace_status (struct trace_status *ts)
       throw_exception (ex);
     }
 
+  result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
+
   /* If the remote target doesn't do tracing, flag it.  */
-  if (*p == '\0')
+  if (result == PACKET_UNKNOWN)
     return -1;
 
   /* We're working with a live target.  */
@@ -11876,6 +11883,9 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
                         "qSearch:memory", "search-memory", 0);
 
+  add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
+                        "qTStatus", "trace-status", 0);
+
   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
                         "vFile:open", "hostio-open", 0);