From 54f3f8e4c1477bec077e132cdccd8097938332e2 Mon Sep 17 00:00:00 2001
From: Øyvind Harboe <oyvind.harboe@zylin.com>
Date: Mon, 7 Jun 2010 15:14:04 +0200
Subject: gdb-server: fix error reporting bugs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

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>
---
 src/server/gdb_server.c | 33 +++++++++------------------------
 1 file changed, 9 insertions(+), 24 deletions(-)

diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index a84c618a..029bdf81 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -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;
 		}
 
-- 
cgit v1.2.3