diff options
author | Jason Wessel <jason.wessel@windriver.com> | 2011-05-23 13:17:41 -0500 |
---|---|---|
committer | Jason Wessel <jason.wessel@windriver.com> | 2011-08-01 13:23:59 -0500 |
commit | f679c4985bb2e7de9d39a5d40b6031361c4ad861 (patch) | |
tree | 9750abdc0f876f38642c06c188b152324c512fdb /kernel/debug/kdb/kdb_io.c | |
parent | 3bdb65ec95e6cccffc40102d7c003047c45da90c (diff) | |
download | kernel_goldelico_gta04-f679c4985bb2e7de9d39a5d40b6031361c4ad861.zip kernel_goldelico_gta04-f679c4985bb2e7de9d39a5d40b6031361c4ad861.tar.gz kernel_goldelico_gta04-f679c4985bb2e7de9d39a5d40b6031361c4ad861.tar.bz2 |
kdb,kgdb: Implement switch and pass buffer from kdb -> gdb
When switching from kdb mode to kgdb mode packets were getting lost
depending on the size of the fifo queue of the serial chip. When gdb
initially connects if it is in kdb mode it should entirely send any
character buffer over to the gdbstub when switching connections.
Previously kdb was zero'ing out the character buffer and this could
lead to gdb failing to connect at all, or a lengthy pause could occur
on the initial connect.
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'kernel/debug/kdb/kdb_io.c')
-rw-r--r-- | kernel/debug/kdb/kdb_io.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c index 96fdaac..bd23326 100644 --- a/kernel/debug/kdb/kdb_io.c +++ b/kernel/debug/kdb/kdb_io.c @@ -35,8 +35,8 @@ static void kgdb_transition_check(char *buffer) { int slen = strlen(buffer); if (strncmp(buffer, "$?#3f", slen) != 0 && - strncmp(buffer, "$qSupported#37", slen) != 0 && - strncmp(buffer, "+$qSupported#37", slen) != 0) { + strncmp(buffer, "$qSupported", slen) != 0 && + strncmp(buffer, "+$qSupported", slen) != 0) { KDB_STATE_SET(KGDB_TRANS); kdb_printf("%s", buffer); } @@ -390,12 +390,14 @@ poll_again: /* Special escape to kgdb */ if (lastchar - buffer >= 5 && strcmp(lastchar - 5, "$?#3f") == 0) { + kdb_gdb_state_pass(lastchar - 5); strcpy(buffer, "kgdb"); KDB_STATE_SET(DOING_KGDB); return buffer; } - if (lastchar - buffer >= 14 && - strcmp(lastchar - 14, "$qSupported#37") == 0) { + if (lastchar - buffer >= 11 && + strcmp(lastchar - 11, "$qSupported") == 0) { + kdb_gdb_state_pass(lastchar - 11); strcpy(buffer, "kgdb"); KDB_STATE_SET(DOING_KGDB2); return buffer; |