gdb: fix broken qCRC packet handling
authorSpencer Oliver <spen@spen-soft.co.uk>
Fri, 26 Oct 2012 11:59:29 +0000 (12:59 +0100)
committerPeter Stuge <peter@stuge.se>
Sun, 28 Oct 2012 01:41:14 +0000 (01:41 +0000)
The rtos layer was incorrectly handling a qCRC packet as a qC packet.
Make sure we check for the qCRC packet and return unhandled so the gdb
server gets a chance to handle it.

This packet is used in the gdb compare-sections cmd.

Change-Id: I21f8e5fa7225fccd13d65cf9e40186895065a7e3
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/933
Tested-by: jenkins
Reviewed-by: Matthias Blaicher <matthias@blaicher.com>
Reviewed-by: Peter Stuge <peter@stuge.se>
src/rtos/rtos.c

index 349f84df0a7c959f2881331af3f7695517a031c1..28bbe5ee169072668bc4e1b62c6e8ea243c04ca3 100644 (file)
@@ -342,6 +342,10 @@ int rtos_thread_packet(struct connection *connection, char *packet, int packet_s
                char offsets[] = "Text=0;Data=0;Bss=0";
                gdb_put_packet(connection, offsets, sizeof(offsets)-1);
                return ERROR_OK;
+       } else if (strncmp(packet, "qCRC:", 5) == 0) {
+               /* make sure we check this before "qC" packet below
+                * otherwise it gets incorrectly handled */
+               return GDB_THREAD_PACKET_NOT_CONSUMED;
        } else if (strncmp(packet, "qC", 2) == 0) {
                if (target->rtos != NULL) {
                        char buffer[19];