gdb_server: Fix confusing warning when entering noack mode
Comment in gdb_server code mistakenly attributed constant warnings about unexpected acknowledgement to the ACK packet sent by GDB when establishing connection. However that is not the case, OpenOCD gdb_server is handling this packet correctly without an warnings. This warning instead was caused by the ACK packet which GDB sends right after going into noack mode. Because OpenOCD gdb_server is already in noack mode at this state, it emits warning about it. This is a documented GDB behaviour (https://sourceware.org/gdb/onlinedocs/gdb/Packet-Acknowledgment.html) so there is no reason to scare users with warnings in this case. This patch basically introduces two-level noack mode: after receiving QStartNoAckMode gdb_server will set noack_mode to 1, then it will receive this last ACK packet, but instead of printing a warning, noack_mode will be increased to 2. Should there be any other ACK packets after that, they will be properly reported by warning. All other code that relies on noack_mode checks it for "!= 0", so there will be no difference if it is 1 or 2. Change-Id: I0e9c57fd93293bfe010390db2f3f161528b11d86 Signed-off-by: Anton Kolesov <anton.kolesov@synopsys.com> Reviewed-on: http://openocd.zylin.com/1895 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>__archive__
parent
32c4c18045
commit
e4125d136c
|
@ -617,11 +617,21 @@ static int gdb_get_packet_inner(struct connection *connection,
|
||||||
case '$':
|
case '$':
|
||||||
break;
|
break;
|
||||||
case '+':
|
case '+':
|
||||||
/* gdb sends a dummy ack '+' at every remote connect - see
|
/* According to the GDB documentation
|
||||||
* remote_start_remote (remote.c)
|
* (https://sourceware.org/gdb/onlinedocs/gdb/Packet-Acknowledgment.html):
|
||||||
* in case anyone tries to debug why they receive this
|
* "gdb sends a final `+` acknowledgment of the stub's `OK`
|
||||||
* warning every time */
|
* response, which can be safely ignored by the stub."
|
||||||
|
* However OpenOCD server already is in noack mode at this
|
||||||
|
* point and instead of ignoring this it was emitting a
|
||||||
|
* warning. This code makes server ignore the first ACK
|
||||||
|
* that will be received after going into noack mode,
|
||||||
|
* warning only about subsequent ACK's. */
|
||||||
|
if (gdb_con->noack_mode > 1) {
|
||||||
LOG_WARNING("acknowledgment received, but no packet pending");
|
LOG_WARNING("acknowledgment received, but no packet pending");
|
||||||
|
} else {
|
||||||
|
LOG_DEBUG("Received first acknowledgment after entering noack mode. Ignoring it.");
|
||||||
|
gdb_con->noack_mode = 2;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case '-':
|
case '-':
|
||||||
LOG_WARNING("negative acknowledgment, but no packet pending");
|
LOG_WARNING("negative acknowledgment, but no packet pending");
|
||||||
|
|
Loading…
Reference in New Issue