target/arm11: fix memory leaks, including register cache
There is no deinit_target method, so few memory allocations leak at openocd exit. Issue identified by tracking all calls to arm_dpm_setup(). Implement the method arm11_dpm_deinit() to free all the memory allocated in arm11_dpm_init() and call it in the new arm11_deinit_target(). NOT TESTED on real HW. Change-Id: Icab86e290fc2db14f70eb84c8286357aadb02a35 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/5694 Tested-by: jenkins
This commit is contained in:
parent
768502403e
commit
7c66df13ef
|
@ -1131,6 +1131,14 @@ static int arm11_init_target(struct command_context *cmd_ctx,
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void arm11_deinit_target(struct target *target)
|
||||||
|
{
|
||||||
|
struct arm11_common *arm11 = target_to_arm11(target);
|
||||||
|
|
||||||
|
arm11_dpm_deinit(arm11);
|
||||||
|
free(arm11);
|
||||||
|
}
|
||||||
|
|
||||||
/* talk to the target and set things up */
|
/* talk to the target and set things up */
|
||||||
static int arm11_examine(struct target *target)
|
static int arm11_examine(struct target *target)
|
||||||
{
|
{
|
||||||
|
@ -1379,5 +1387,6 @@ struct target_type arm11_target = {
|
||||||
.commands = arm11_command_handlers,
|
.commands = arm11_command_handlers,
|
||||||
.target_create = arm11_target_create,
|
.target_create = arm11_target_create,
|
||||||
.init_target = arm11_init_target,
|
.init_target = arm11_init_target,
|
||||||
|
.deinit_target = arm11_deinit_target,
|
||||||
.examine = arm11_examine,
|
.examine = arm11_examine,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1193,3 +1193,13 @@ int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr)
|
||||||
|
|
||||||
return arm11_bpwp_flush(arm11);
|
return arm11_bpwp_flush(arm11);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void arm11_dpm_deinit(struct arm11_common *arm11)
|
||||||
|
{
|
||||||
|
struct arm_dpm *dpm = &arm11->dpm;
|
||||||
|
|
||||||
|
free(arm11->bpwp_actions);
|
||||||
|
arm_free_reg_cache(dpm->arm);
|
||||||
|
free(dpm->dbp);
|
||||||
|
free(dpm->dwp);
|
||||||
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ int arm11_read_memory_word(struct arm11_common *arm11,
|
||||||
uint32_t address, uint32_t *result);
|
uint32_t address, uint32_t *result);
|
||||||
|
|
||||||
int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr);
|
int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr);
|
||||||
|
void arm11_dpm_deinit(struct arm11_common *arm11);
|
||||||
int arm11_bpwp_flush(struct arm11_common *arm11);
|
int arm11_bpwp_flush(struct arm11_common *arm11);
|
||||||
|
|
||||||
#endif /* OPENOCD_TARGET_ARM11_DBGTAP_H */
|
#endif /* OPENOCD_TARGET_ARM11_DBGTAP_H */
|
||||||
|
|
Loading…
Reference in New Issue