gdb: clean up error handling in step/continue
if step/continue fails, then the error should be reported to the calling fn. The calling fn decides if the connection has to be aborted or if packet processing can continue. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>__archive__
parent
cd9c61cc06
commit
5104d56e5c
|
@ -2151,7 +2151,17 @@ static int gdb_input_inner(struct connection *connection)
|
||||||
struct gdb_connection *gdb_con = connection->priv;
|
struct gdb_connection *gdb_con = connection->priv;
|
||||||
static int extended_protocol = 0;
|
static int extended_protocol = 0;
|
||||||
|
|
||||||
/* drain input buffer */
|
/* drain input buffer. If one of the packets fail, then an error
|
||||||
|
* packet is replied, if applicable.
|
||||||
|
*
|
||||||
|
* This loop will terminate and the error code is returned.
|
||||||
|
*
|
||||||
|
* The calling fn will check if this error is something that
|
||||||
|
* can be recovered from, or if the connection must be closed.
|
||||||
|
*
|
||||||
|
* If the error is recoverable, this fn is called again to
|
||||||
|
* drain the rest of the buffer.
|
||||||
|
*/
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
packet_size = GDB_BUFFER_SIZE-1;
|
packet_size = GDB_BUFFER_SIZE-1;
|
||||||
|
@ -2235,8 +2245,6 @@ static int gdb_input_inner(struct connection *connection)
|
||||||
case 'c':
|
case 'c':
|
||||||
case 's':
|
case 's':
|
||||||
{
|
{
|
||||||
int retval = ERROR_OK;
|
|
||||||
|
|
||||||
struct gdb_connection *gdb_con = connection->priv;
|
struct gdb_connection *gdb_con = connection->priv;
|
||||||
log_add_callback(gdb_log_callback, connection);
|
log_add_callback(gdb_log_callback, connection);
|
||||||
|
|
||||||
|
@ -2271,7 +2279,7 @@ static int gdb_input_inner(struct connection *connection)
|
||||||
}
|
}
|
||||||
gdb_con->sync = false;
|
gdb_con->sync = false;
|
||||||
|
|
||||||
if ((retval!=ERROR_OK) || (!already_running && nostep))
|
if (!already_running && nostep)
|
||||||
{
|
{
|
||||||
/* Either the target isn't in the halted state, then we can't
|
/* Either the target isn't in the halted state, then we can't
|
||||||
* step/continue. This might be early setup, etc.
|
* step/continue. This might be early setup, etc.
|
||||||
|
@ -2294,7 +2302,9 @@ static int gdb_input_inner(struct connection *connection)
|
||||||
|
|
||||||
if (!already_running)
|
if (!already_running)
|
||||||
{
|
{
|
||||||
int retval = gdb_step_continue_packet(connection, target, packet, packet_size);
|
/* Here we don't want packet processing to stop even if this fails,
|
||||||
|
* so we use a local variable instead of retval. */
|
||||||
|
retval = gdb_step_continue_packet(connection, target, packet, packet_size);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
{
|
{
|
||||||
/* we'll never receive a halted condition... issue a false one.. */
|
/* we'll never receive a halted condition... issue a false one.. */
|
||||||
|
|
Loading…
Reference in New Issue