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>
__archive__
Andreas Färber 2016-05-08 17:40:18 +02:00 committed by Andreas Fritiofson
parent 08cdb58f05
commit fcaf7e0cfe
1 changed files with 5 additions and 10 deletions

View File

@ -1551,7 +1551,7 @@ int arm_blank_check_memory(struct target *target,
+ i * sizeof(uint32_t), + i * sizeof(uint32_t),
check_code[i]); check_code[i]);
if (retval != ERROR_OK) if (retval != ERROR_OK)
return retval; goto cleanup;
} }
arm_algo.common_magic = ARM_COMMON_MAGIC; arm_algo.common_magic = ARM_COMMON_MAGIC;
@ -1575,23 +1575,18 @@ int arm_blank_check_memory(struct target *target,
check_algorithm->address, check_algorithm->address,
exit_var, exit_var,
10000, &arm_algo); 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;
}
if (retval == ERROR_OK)
*blank = buf_get_u32(reg_params[2].value, 0, 32); *blank = buf_get_u32(reg_params[2].value, 0, 32);
destroy_reg_param(&reg_params[0]); destroy_reg_param(&reg_params[0]);
destroy_reg_param(&reg_params[1]); destroy_reg_param(&reg_params[1]);
destroy_reg_param(&reg_params[2]); destroy_reg_param(&reg_params[2]);
cleanup:
target_free_working_area(target, check_algorithm); target_free_working_area(target, check_algorithm);
return ERROR_OK; return retval;
} }
static int arm_full_context(struct target *target) static int arm_full_context(struct target *target)