From: Jason Wessel Date: Thu, 22 Jul 2010 00:27:05 +0000 (-0500) Subject: repair gdbstub to match the gdbserial protocol specification X-Git-Tag: v2.6.34.11~152 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=ebe451b0dd80704dc56e06c35690a47d26be149b;p=karo-tx-linux.git repair gdbstub to match the gdbserial protocol specification commit fb82c0ff27b2c40c6f7a3d1a94cafb154591fa80 upstream. The gdbserial protocol handler should return an empty packet instead of an error string when ever it responds to a command it does not implement. The problem cases come from a debugger client sending qTBuffer, qTStatus, qSearch, qSupported. The incorrect response from the gdbstub leads the debugger clients to not function correctly. Recent versions of gdb will not detach correctly as a result of this behavior. [PG: file renamed by time of fb82c0ff kgdb.c --> debug/gdbstub.c] Signed-off-by: Jason Wessel Signed-off-by: Dongdong Deng Signed-off-by: Paul Gortmaker --- diff --git a/kernel/kgdb.c b/kernel/kgdb.c index 11f3515ca83f..0887213f842d 100644 --- a/kernel/kgdb.c +++ b/kernel/kgdb.c @@ -976,10 +976,8 @@ static void gdb_cmd_query(struct kgdb_state *ks) switch (remcom_in_buffer[1]) { case 's': case 'f': - if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10)) { - error_packet(remcom_out_buffer, -EINVAL); + if (memcmp(remcom_in_buffer + 2, "ThreadInfo", 10)) break; - } i = 0; remcom_out_buffer[0] = 'm'; @@ -1020,10 +1018,9 @@ static void gdb_cmd_query(struct kgdb_state *ks) pack_threadid(remcom_out_buffer + 2, thref); break; case 'T': - if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16)) { - error_packet(remcom_out_buffer, -EINVAL); + if (memcmp(remcom_in_buffer + 1, "ThreadExtraInfo,", 16)) break; - } + ks->threadid = 0; ptr = remcom_in_buffer + 17; kgdb_hex2long(&ptr, &ks->threadid);