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  <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".
This commit is contained in:
Pedro Alves
2013-03-28 21:58:03 +00:00
parent 215b9f980a
commit bd3eecc323
5 changed files with 36 additions and 1 deletions

View 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.

View File

@ -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.

View 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

View 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

View 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);