aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Färber <afaerber@suse.de>2016-05-08 17:40:18 +0200
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>2016-05-22 15:48:44 +0100
commitfcaf7e0cfec24efc78e4c7c9a00f88b0a32bedd4 (patch)
tree6e6e60d620793bef676403504b1054b91f7c3bca
parent08cdb58f05d0229b8ecdc9aa2c9e805d9f0f77dd (diff)
armv4_5: Improve arm_blank_check_memory() error handling
Clean up the working area in case writing fails. Change the error handling paradigm to avoid duplication. Change-Id: I95bb12fbe7c80b594e178468bcd4f6387c682c93 Signed-off-by: Andreas Färber <afaerber@suse.de> Reviewed-on: http://openocd.zylin.com/3471 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
-rw-r--r--src/target/armv4_5.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c
index 5b24e69a..18ce7df3 100644
--- a/src/target/armv4_5.c
+++ b/src/target/armv4_5.c
@@ -1551,7 +1551,7 @@ int arm_blank_check_memory(struct target *target,
+ i * sizeof(uint32_t),
check_code[i]);
if (retval != ERROR_OK)
- return retval;
+ goto cleanup;
}
arm_algo.common_magic = ARM_COMMON_MAGIC;
@@ -1575,23 +1575,18 @@ int arm_blank_check_memory(struct target *target,
check_algorithm->address,
exit_var,
10000, &arm_algo);
- if (retval != ERROR_OK) {
- destroy_reg_param(&reg_params[0]);
- destroy_reg_param(&reg_params[1]);
- destroy_reg_param(&reg_params[2]);
- target_free_working_area(target, check_algorithm);
- return retval;
- }
- *blank = buf_get_u32(reg_params[2].value, 0, 32);
+ if (retval == ERROR_OK)
+ *blank = buf_get_u32(reg_params[2].value, 0, 32);
destroy_reg_param(&reg_params[0]);
destroy_reg_param(&reg_params[1]);
destroy_reg_param(&reg_params[2]);
+cleanup:
target_free_working_area(target, check_algorithm);
- return ERROR_OK;
+ return retval;
}
static int arm_full_context(struct target *target)