Browse Source

gdb-server: fix error reporting bugs

GDB and OpenOCD has two different error number
spaces and no mapping exists between them.

If a specific error number is to be reported
to GDB then this has to be done at the calling
site, rather than as a generic routine that
tries to map "retval" to GDB error number speak.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
tags/v0.5.0-rc1
Øyvind Harboe 14 years ago
parent
commit
54f3f8e4c1
1 changed files with 9 additions and 24 deletions
  1. +9
    -24
      src/server/gdb_server.c

+ 9
- 24
src/server/gdb_server.c View File

@@ -1219,29 +1219,14 @@ static int gdb_set_register_packet(struct connection *connection,
return ERROR_OK;
}

/* No attempt is made to translate the "retval" to
* GDB speak. This has to be done at the calling
* site as no mapping really exists.
*/
static int gdb_error(struct connection *connection, int retval)
{
switch (retval)
{
case ERROR_TARGET_DATA_ABORT:
gdb_send_error(connection, EIO);
break;
case ERROR_TARGET_TRANSLATION_FAULT:
gdb_send_error(connection, EFAULT);
break;
case ERROR_TARGET_UNALIGNED_ACCESS:
gdb_send_error(connection, EFAULT);
break;
case ERROR_TARGET_NOT_HALTED:
gdb_send_error(connection, EFAULT);
break;
default:
/* This could be that the target reset itself. */
LOG_ERROR("unexpected error %i", retval);
gdb_send_error(connection, EFAULT);
break;
}

LOG_DEBUG("Reporting %i to GDB as generic error", retval);
gdb_send_error(connection, EFAULT);
return ERROR_OK;
}

@@ -1719,7 +1704,7 @@ static int gdb_memory_map(struct connection *connection,
if (retval != ERROR_OK)
{
free(banks);
gdb_send_error(connection, retval);
gdb_error(connection, retval);
return retval;
}
banks[i] = p;
@@ -1801,7 +1786,7 @@ static int gdb_memory_map(struct connection *connection,
xml_printf(&retval, &xml, &pos, &size, "</memory-map>\n");

if (retval != ERROR_OK) {
gdb_send_error(connection, retval);
gdb_error(connection, retval);
return retval;
}

@@ -1952,7 +1937,7 @@ static int gdb_query_packet(struct connection *connection,

if (retval != ERROR_OK)
{
gdb_send_error(connection, retval);
gdb_error(connection, retval);
return retval;
}



Loading…
Cancel
Save