summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorØyvind Harboe <oyvind.harboe@zylin.com>2010-06-16 08:24:51 +0200
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-06-16 08:57:49 +0200
commit5104d56e5c37defaf2f6c5c8607bac45b8b49b32 (patch)
treec6b62d7421b3fe82377702c8bf552590e2f2ca0d /src/server
parentcd9c61cc068635fa707981decfea600ee7e94201 (diff)
downloadopenocd+libswd-5104d56e5c37defaf2f6c5c8607bac45b8b49b32.tar.gz
openocd+libswd-5104d56e5c37defaf2f6c5c8607bac45b8b49b32.tar.bz2
openocd+libswd-5104d56e5c37defaf2f6c5c8607bac45b8b49b32.tar.xz
openocd+libswd-5104d56e5c37defaf2f6c5c8607bac45b8b49b32.zip
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>
Diffstat (limited to 'src/server')
-rw-r--r--src/server/gdb_server.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 029bdf81..8ed9e74f 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -2151,7 +2151,17 @@ static int gdb_input_inner(struct connection *connection)
struct gdb_connection *gdb_con = connection->priv;
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
{
packet_size = GDB_BUFFER_SIZE-1;
@@ -2235,8 +2245,6 @@ static int gdb_input_inner(struct connection *connection)
case 'c':
case 's':
{
- int retval = ERROR_OK;
-
struct gdb_connection *gdb_con = connection->priv;
log_add_callback(gdb_log_callback, connection);
@@ -2271,7 +2279,7 @@ static int gdb_input_inner(struct connection *connection)
}
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
* step/continue. This might be early setup, etc.
@@ -2294,7 +2302,9 @@ static int gdb_input_inner(struct connection *connection)
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)
{
/* we'll never receive a halted condition... issue a false one.. */