From 9d57f4d5a1bad5c5bd42df56f402413be828d915 Mon Sep 17 00:00:00 2001
From: David Brownell <dbrownell@users.sourceforge.net>
Date: Mon, 16 Nov 2009 17:52:50 -0800
Subject: [PATCH] ARMv4/ARMv5: no exit() calls

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
---
 src/target/armv4_5.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c
index b60b8b275..717c8265b 100644
--- a/src/target/armv4_5.c
+++ b/src/target/armv4_5.c
@@ -342,7 +342,7 @@ int armv4_5_arch_state(struct target *target)
 	if (armv4_5->common_magic != ARMV4_5_COMMON_MAGIC)
 	{
 		LOG_ERROR("BUG: called for a non-ARMv4/5 target");
-		exit(-1);
+		return ERROR_FAIL;
 	}
 
 	LOG_USER("target halted in %s state due to %s, current mode: %s\ncpsr: 0x%8.8" PRIx32 " pc: 0x%8.8" PRIx32 "",
@@ -651,13 +651,13 @@ int armv4_5_run_algorithm_inner(struct target *target, int num_mem_params, struc
 		if (!reg)
 		{
 			LOG_ERROR("BUG: register '%s' not found", reg_params[i].reg_name);
-			exit(-1);
+			return ERROR_INVALID_ARGUMENTS;
 		}
 
 		if (reg->size != reg_params[i].size)
 		{
 			LOG_ERROR("BUG: register '%s' size doesn't match reg_params[i].size", reg_params[i].reg_name);
-			exit(-1);
+			return ERROR_INVALID_ARGUMENTS;
 		}
 
 		if ((retval = armv4_5_set_core_reg(reg, reg_params[i].value)) != ERROR_OK)
@@ -674,7 +674,7 @@ int armv4_5_run_algorithm_inner(struct target *target, int num_mem_params, struc
 	else
 	{
 		LOG_ERROR("BUG: can't execute algorithms when not in ARM or Thumb state");
-		exit(-1);
+		return ERROR_INVALID_ARGUMENTS;
 	}
 
 	if (armv4_5_algorithm_info->core_mode != ARMV4_5_MODE_ANY)
@@ -724,13 +724,15 @@ int armv4_5_run_algorithm_inner(struct target *target, int num_mem_params, struc
 			if (!reg)
 			{
 				LOG_ERROR("BUG: register '%s' not found", reg_params[i].reg_name);
-				exit(-1);
+				retval = ERROR_INVALID_ARGUMENTS;
+				continue;
 			}
 
 			if (reg->size != reg_params[i].size)
 			{
 				LOG_ERROR("BUG: register '%s' size doesn't match reg_params[i].size", reg_params[i].reg_name);
-				exit(-1);
+				retval = ERROR_INVALID_ARGUMENTS;
+				continue;
 			}
 
 			buf_set_u32(reg_params[i].value, 0, 32, buf_get_u32(reg->value, 0, 32));
-- 
GitLab