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__
parent
00635e28ba
commit
54f3f8e4c1
|
@ -1219,29 +1219,14 @@ static int gdb_set_register_packet(struct connection *connection,
|
||||||
return ERROR_OK;
|
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)
|
static int gdb_error(struct connection *connection, int retval)
|
||||||
{
|
{
|
||||||
switch (retval)
|
LOG_DEBUG("Reporting %i to GDB as generic error", retval);
|
||||||
{
|
|
||||||
case ERROR_TARGET_DATA_ABORT:
|
|
||||||
gdb_send_error(connection, EIO);
|
|
||||||
break;
|
|
||||||
case ERROR_TARGET_TRANSLATION_FAULT:
|
|
||||||
gdb_send_error(connection, EFAULT);
|
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;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1719,7 +1704,7 @@ static int gdb_memory_map(struct connection *connection,
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
{
|
{
|
||||||
free(banks);
|
free(banks);
|
||||||
gdb_send_error(connection, retval);
|
gdb_error(connection, retval);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
banks[i] = p;
|
banks[i] = p;
|
||||||
|
@ -1801,7 +1786,7 @@ static int gdb_memory_map(struct connection *connection,
|
||||||
xml_printf(&retval, &xml, &pos, &size, "</memory-map>\n");
|
xml_printf(&retval, &xml, &pos, &size, "</memory-map>\n");
|
||||||
|
|
||||||
if (retval != ERROR_OK) {
|
if (retval != ERROR_OK) {
|
||||||
gdb_send_error(connection, retval);
|
gdb_error(connection, retval);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1952,7 +1937,7 @@ static int gdb_query_packet(struct connection *connection,
|
||||||
|
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
{
|
{
|
||||||
gdb_send_error(connection, retval);
|
gdb_error(connection, retval);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue