target/arm11: fix memory leaks, including register cache 94/5694/4
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 */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)