summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
7685024)
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
+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 */
static int arm11_examine(struct target *target)
{
/* talk to the target and set things up */
static int arm11_examine(struct target *target)
{
.commands = arm11_command_handlers,
.target_create = arm11_target_create,
.init_target = arm11_init_target,
.commands = arm11_command_handlers,
.target_create = arm11_target_create,
.init_target = arm11_init_target,
+ .deinit_target = arm11_deinit_target,
.examine = arm11_examine,
};
.examine = arm11_examine,
};
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);
+}
uint32_t address, uint32_t *result);
int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr);
uint32_t address, uint32_t *result);
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);
#endif /* OPENOCD_TARGET_ARM11_DBGTAP_H */
int arm11_bpwp_flush(struct arm11_common *arm11);
#endif /* OPENOCD_TARGET_ARM11_DBGTAP_H */