gdb/remote: fix qRcmd error handling
This commit:
commit 3623271997
Date: Tue Jan 30 15:55:47 2024 +0100
remote.c: Use packet_check_result
Introduced a bug in the error handling of the qRcmd packet. Prior to
this commit if a packet had status PACKET_OK then, if the packet
contained the text "OK" we considered the packet handled. But, if the
packet contained any other content (that was not an error message)
then the content was printed to the user.
After the above commit this was no longer the case, any non-error
packet that didn't contain "OK" would be treated as an error.
Currently, gdbserver doesn't exercise this path so it's not possible
to write a simple test for this case. When gdbserver wishes to print
output it sends back an 'O' string output packet, these packets are
handled earlier in the process. Then once gdbserver has finished
sending output an 'OK' packet is sent.
Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
parent
679ad6e126
commit
c541d53765
1 changed files with 15 additions and 10 deletions
25
gdb/remote.c
25
gdb/remote.c
|
@ -11997,18 +11997,23 @@ remote_target::rcmd (const char *command, struct ui_file *outbuf)
|
|||
continue;
|
||||
}
|
||||
packet_result result = packet_check_result (buf, false);
|
||||
if (strcmp (buf, "OK") == 0)
|
||||
break;
|
||||
else if (result.status () == PACKET_UNKNOWN)
|
||||
error (_("Target does not support this command."));
|
||||
else
|
||||
error (_("Protocol error with Rcmd: %s."), result.err_msg ());
|
||||
|
||||
for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
|
||||
switch (result.status ())
|
||||
{
|
||||
char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
|
||||
case PACKET_UNKNOWN:
|
||||
error (_("Target does not support this command."));
|
||||
case PACKET_ERROR:
|
||||
error (_("Protocol error with Rcmd: %s."), result.err_msg ());
|
||||
case PACKET_OK:
|
||||
break;
|
||||
}
|
||||
|
||||
gdb_putc (c, outbuf);
|
||||
if (strcmp (buf, "OK") != 0)
|
||||
{
|
||||
for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
|
||||
{
|
||||
char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
|
||||
gdb_putc (c, outbuf);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue