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>
__archive__
Øyvind Harboe 2010-06-07 15:14:04 +02:00
parent 00635e28ba
commit 54f3f8e4c1
1 changed files with 9 additions and 24 deletions

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:
LOG_DEBUG("Reporting %i to GDB as generic error", retval);
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;
}
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;
}