From bd3eecc32310ff918731cda9485d48ce5405cb43 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 28 Mar 2013 21:58:03 +0000 Subject: [PATCH] Stop sending qTStatus if the target doesn't recognize it; add packet configuration command. 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 * 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 * gdb.texinfo (Remote Configuration) : Add entry for "trace-status". --- gdb/ChangeLog | 10 ++++++++++ gdb/NEWS | 6 ++++++ gdb/doc/ChangeLog | 5 +++++ gdb/doc/gdb.texinfo | 4 ++++ gdb/remote.c | 12 +++++++++++- 5 files changed, 36 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f8c393b9b5b..8b3f369180a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2013-03-28 Pedro Alves + + * 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 * symfile.c (find_separate_debug_file): Add comment. diff --git a/gdb/NEWS b/gdb/NEWS index 77a27f78dca..56b68d8272a 100644 --- 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. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 31593d4f4b3..8402495b4a1 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2013-03-28 Pedro Alves + + * gdb.texinfo (Remote Configuration) : Add entry for "trace-status". + 2013-03-28 Eli Zaretskii * gdb.texinfo (Maintenance Commands): Use @enumerate, not "@table diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index dec27a82bed..3b63d015e69 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -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 diff --git a/gdb/remote.c b/gdb/remote.c index 865995378d7..b8a7a1af0e6 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -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); -- 2.30.2