diff options
author | Pedro Alves <palves@redhat.com> | 2013-03-28 21:58:03 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2013-03-28 21:58:03 +0000 |
commit | bd3eecc32310ff918731cda9485d48ce5405cb43 (patch) | |
tree | f0d811b3e9e3634ef801709c1b97692f07b55994 /gdb/remote.c | |
parent | 215b9f980a60ef3224f3093a52954e0518e4fd28 (diff) | |
download | gdb-bd3eecc32310ff918731cda9485d48ce5405cb43.zip gdb-bd3eecc32310ff918731cda9485d48ce5405cb43.tar.gz gdb-bd3eecc32310ff918731cda9485d48ce5405cb43.tar.bz2 |
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".
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index 8659953..b8a7a1a 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); |