target/arm11: fix memory leaks, including register cache
authorAntonio Borneo <borneo.antonio@gmail.com>
Mon, 25 May 2020 10:04:17 +0000 (12:04 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 2 Aug 2020 09:48:52 +0000 (10:48 +0100)
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
src/target/arm11.c
src/target/arm11_dbgtap.c
src/target/arm11_dbgtap.h

index 10a1d6de5298a0e8259233092357910fb6da3c83..68d4e18944324e076053ce0b2e35005873c5ef77 100644 (file)
@@ -1131,6 +1131,14 @@ static int arm11_init_target(struct command_context *cmd_ctx,
        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 */
 static int arm11_examine(struct target *target)
 {
@@ -1379,5 +1387,6 @@ struct target_type arm11_target = {
        .commands = arm11_command_handlers,
        .target_create = arm11_target_create,
        .init_target = arm11_init_target,
+       .deinit_target = arm11_deinit_target,
        .examine = arm11_examine,
 };
index a758db58fc09836dcf628c7db2e63cb56f6ccf39..60be0096ff332167e0a06bc8f0e4d5f1e6d6466d 100644 (file)
@@ -1193,3 +1193,13 @@ int arm11_dpm_init(struct arm11_common *arm11, uint32_t didr)
 
        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);
+}
index 541434edc4ea00e502461601490907b0c9ff74d9..be02484117d195e44afd81fae12a841d7ede9728 100644 (file)
@@ -78,6 +78,7 @@ int arm11_read_memory_word(struct arm11_common *arm11,
                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 */