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/5695

-- gerrit

commit 30046fd52063c7b72c8dee81f713a10585c0594e
Author: Antonio Borneo <[email protected]>
Date:   Mon May 25 10:43:53 2020 +0200

    target/xscale: fix memory leak of register cache
    
    There is no method to free the register cache, allocated in
    xscale_build_reg_cache(), so we get a memory leak.
    Issue identified by tracking all calls to arm_build_reg_cache().
    
    Implement the method xscale_deinit_target() that in turn calls the
    new xscale_free_reg_cache().
    
    NOT TESTED on real HW, I will rely on gerrit reviewer for tests.
    
    Change-Id: Ibb2104c42411b76f4bb77c2fa387d1b85a3d2d5d
    Signed-off-by: Antonio Borneo <[email protected]>

diff --git a/src/target/xscale.c b/src/target/xscale.c
index edab4f9..7175b0c 100644
--- a/src/target/xscale.c
+++ b/src/target/xscale.c
@@ -2903,6 +2903,21 @@ static void xscale_build_reg_cache(struct target *target)
        xscale->reg_cache = (*cache_p);
 }
 
+static void xscale_free_reg_cache(struct target *target)
+{
+       struct xscale_common *xscale = target_to_xscale(target);
+       struct reg_cache *cache = xscale->reg_cache;
+
+       for (unsigned int i = 0; i < ARRAY_SIZE(xscale_reg_arch_info); i++)
+               free(cache->reg_list[i].value);
+
+       free(cache->reg_list[0].arch_info);
+       free(cache->reg_list);
+       free(cache);
+
+       arm_free_reg_cache(&xscale->arm);
+}
+
 static int xscale_init_target(struct command_context *cmd_ctx,
        struct target *target)
 {
@@ -2910,6 +2925,11 @@ static int xscale_init_target(struct command_context 
*cmd_ctx,
        return ERROR_OK;
 }
 
+static void xscale_deinit_target(struct target *target)
+{
+       xscale_free_reg_cache(target);
+}
+
 static int xscale_init_arch_info(struct target *target,
        struct xscale_common *xscale, struct jtag_tap *tap)
 {
@@ -3725,6 +3745,7 @@ struct target_type xscale_target = {
        .commands = xscale_command_handlers,
        .target_create = xscale_target_create,
        .init_target = xscale_init_target,
+       .deinit_target = xscale_deinit_target,
 
        .virt2phys = xscale_virt2phys,
        .mmu = xscale_mmu

-- 


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

Reply via email to