gdb_server: ignore stray + in ACK mode
authorMatej Kupljen <matej.kupljen@gmail.com>
Wed, 11 Feb 2015 08:28:41 +0000 (09:28 +0100)
committerPaul Fertser <fercerpav@gmail.com>
Sun, 22 Feb 2015 16:16:06 +0000 (16:16 +0000)
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>
src/server/gdb_server.c

index 152a06c72e1e5f3068786838b0389d2476c6f035..4a33a3022be34fa8290ccb414e761f38d055886c 100644 (file)
@@ -628,7 +628,7 @@ static int gdb_get_packet_inner(struct connection *connection,
                                         * warning only about subsequent ACK's. */
                                        if (gdb_con->noack_mode > 1) {
                                                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.");
                                                gdb_con->noack_mode = 2;
                                        }