target/arm7tdmi: fix memory leak of register cache
There is no method to free the register cache, allocated in arm7tdmi_init_target(), so we get a memory leak. Issue identified by tracking all calls to arm_build_reg_cache(). Implement the method arm7tdmi_deinit_target() that in turn calls arm7tdmi_free_reg_cache(). NOT TESTED on a real arm7tdmi target. Tested on a arm926ejs (SPEAr320) by hacking the target type and pretending it is a arm7tdmi: sed -i s/arm926ejs/arm7tdmi/ tcl/target/spear3xx.cfg Change-Id: Iad465b708eb4ebb298725d7155fea76357e9045c Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/5696 Tested-by: jenkins
This commit is contained in:
parent
df1dcc27ee
commit
19aa77cc7f
|
@ -613,6 +613,13 @@ static void arm7tdmi_build_reg_cache(struct target *target)
|
|||
(*cache_p) = arm_build_reg_cache(target, arm);
|
||||
}
|
||||
|
||||
static void arm7tdmi_free_reg_cache(struct target *target)
|
||||
{
|
||||
struct arm *arm = target_to_arm(target);
|
||||
|
||||
arm_free_reg_cache(arm);
|
||||
}
|
||||
|
||||
int arm7tdmi_init_target(struct command_context *cmd_ctx, struct target *target)
|
||||
{
|
||||
arm7tdmi_build_reg_cache(target);
|
||||
|
@ -620,6 +627,11 @@ int arm7tdmi_init_target(struct command_context *cmd_ctx, struct target *target)
|
|||
return ERROR_OK;
|
||||
}
|
||||
|
||||
void arm7tdmi_deinit_target(struct target *target)
|
||||
{
|
||||
arm7tdmi_free_reg_cache(target);
|
||||
}
|
||||
|
||||
int arm7tdmi_init_arch_info(struct target *target,
|
||||
struct arm7_9_common *arm7_9, struct jtag_tap *tap)
|
||||
{
|
||||
|
@ -718,6 +730,7 @@ struct target_type arm7tdmi_target = {
|
|||
.commands = arm7_9_command_handlers,
|
||||
.target_create = arm7tdmi_target_create,
|
||||
.init_target = arm7tdmi_init_target,
|
||||
.deinit_target = arm7tdmi_deinit_target,
|
||||
.examine = arm7_9_examine,
|
||||
.check_reset = arm7_9_check_reset,
|
||||
};
|
||||
|
|
|
@ -28,5 +28,6 @@ int arm7tdmi_init_arch_info(struct target *target,
|
|||
struct arm7_9_common *arm7_9, struct jtag_tap *tap);
|
||||
int arm7tdmi_init_target(struct command_context *cmd_ctx,
|
||||
struct target *target);
|
||||
void arm7tdmi_deinit_target(struct target *target);
|
||||
|
||||
#endif /* OPENOCD_TARGET_ARM7TDMI_H */
|
||||
|
|
Loading…
Reference in New Issue