This is an automated email from Gerrit.

Antonio Borneo ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/5696

-- gerrit

commit a4a203dd8858a6a760ee5bb6c1c880d3205b771c
Author: Antonio Borneo <[email protected]>
Date:   Mon May 25 10:58:40 2020 +0200

    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 real HW, I will rely on gerrit reviewer for tests.
    
    Change-Id: Iad465b708eb4ebb298725d7155fea76357e9045c
    Signed-off-by: Antonio Borneo <[email protected]>

diff --git a/src/target/arm7tdmi.c b/src/target/arm7tdmi.c
index e1e91c3..01685ab 100644
--- a/src/target/arm7tdmi.c
+++ b/src/target/arm7tdmi.c
@@ -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,
 };
diff --git a/src/target/arm7tdmi.h b/src/target/arm7tdmi.h
index 053f64d..3cc3d4a 100644
--- a/src/target/arm7tdmi.h
+++ b/src/target/arm7tdmi.h
@@ -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 */

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to