gdb_server: ignore stray + in ACK mode

I couldn't make OpenOCD to work with GDB. I was always getting this in GDB:
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Malformed response to offset query, timeout
(gdb)
While debugging gdb remote protocol, I have seen that gdb responds with:
w ++$?#3f
And those two '+' seems to confuse the OpenOCD parser, if it sees another
'+' sign it emits the DEBUG output and sets the noack_mode to 2. The
problem is that we weren't even IN noack mode, this was set to 0 and then
it explicitly sets it to 2 and thus turning the noack mode on.

Change-Id: If267c9226e57fa83121ded09cf69829f8f0b4b93
Signed-off-by: Matej Kupljen <matej.kupljen@gmail.com>
Reviewed-on: http://openocd.zylin.com/2545
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-by: Paul Fertser <fercerpav@gmail.com>
This commit is contained in:
Matej Kupljen 2015-02-11 09:28:41 +01:00 committed by Paul Fertser
parent db83fb307b
commit 750f8cd0c5
1 changed files with 1 additions and 1 deletions

View File

@ -628,7 +628,7 @@ static int gdb_get_packet_inner(struct connection *connection,
* warning only about subsequent ACK's. */ * warning only about subsequent ACK's. */
if (gdb_con->noack_mode > 1) { if (gdb_con->noack_mode > 1) {
LOG_WARNING("acknowledgment received, but no packet pending"); LOG_WARNING("acknowledgment received, but no packet pending");
} else { } else if (gdb_con->noack_mode) {
LOG_DEBUG("Received first acknowledgment after entering noack mode. Ignoring it."); LOG_DEBUG("Received first acknowledgment after entering noack mode. Ignoring it.");
gdb_con->noack_mode = 2; gdb_con->noack_mode = 2;
} }