aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorAndreas Färber <afaerber@suse.de>2016-05-08 20:18:49 +0200
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>2016-05-22 15:49:17 +0100
commit1eb19b8de5bf2f6699766f2178d1ef04ce4579a6 (patch)
tree0b0645e12337709a347c62ae48cd773ea532c984 /src/target
parentfcaf7e0cfec24efc78e4c7c9a00f88b0a32bedd4 (diff)
downloadriscv-openocd-1eb19b8de5bf2f6699766f2178d1ef04ce4579a6.zip
riscv-openocd-1eb19b8de5bf2f6699766f2178d1ef04ce4579a6.tar.gz
riscv-openocd-1eb19b8de5bf2f6699766f2178d1ef04ce4579a6.tar.bz2
armv4_5: Improve arm_checksum_memory() error handling
Clean up the working area in case writing fails. Change the error handling paradigm to avoid duplication. Change-Id: Ie3f95f992a98a1325428e4032a1c17346d4c9977 Signed-off-by: Andreas Färber <afaerber@suse.de> Reviewed-on: http://openocd.zylin.com/3472 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Diffstat (limited to 'src/target')
-rw-r--r--src/target/armv4_5.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c
index 18ce7df..ba873b0 100644
--- a/src/target/armv4_5.c
+++ b/src/target/armv4_5.c
@@ -1467,7 +1467,7 @@ int arm_checksum_memory(struct target *target,
crc_algorithm->address + i * sizeof(uint32_t),
arm_crc_code[i]);
if (retval != ERROR_OK)
- return retval;
+ goto cleanup;
}
arm_algo.common_magic = ARM_COMMON_MAGIC;
@@ -1491,22 +1491,19 @@ int arm_checksum_memory(struct target *target,
crc_algorithm->address,
exit_var,
timeout, &arm_algo);
- if (retval != ERROR_OK) {
- LOG_ERROR("error executing ARM crc algorithm");
- destroy_reg_param(&reg_params[0]);
- destroy_reg_param(&reg_params[1]);
- target_free_working_area(target, crc_algorithm);
- return retval;
- }
- *checksum = buf_get_u32(reg_params[0].value, 0, 32);
+ if (retval == ERROR_OK)
+ *checksum = buf_get_u32(reg_params[0].value, 0, 32);
+ else
+ LOG_ERROR("error executing ARM crc algorithm");
destroy_reg_param(&reg_params[0]);
destroy_reg_param(&reg_params[1]);
+cleanup:
target_free_working_area(target, crc_algorithm);
- return ERROR_OK;
+ return retval;
}
/**