From fb9cd9750439776943c0760f8d51ac51d58651b9 Mon Sep 17 00:00:00 2001 From: danghvu Date: Mon, 3 Oct 2016 14:47:03 -0500 Subject: [PATCH] memleak: Fix m68k memleak --- qemu/target-m68k/unicorn.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/qemu/target-m68k/unicorn.c b/qemu/target-m68k/unicorn.c index 9001921b..532b9301 100644 --- a/qemu/target-m68k/unicorn.c +++ b/qemu/target-m68k/unicorn.c @@ -15,6 +15,31 @@ static void m68k_set_pc(struct uc_struct *uc, uint64_t address) ((CPUM68KState *)uc->current_cpu->env_ptr)->pc = address; } +void m68k_release(void* ctx); +void m68k_release(void* ctx) +{ + release_common(ctx); + TCGContext *tcg_ctx = (TCGContext *) ctx; + g_free(tcg_ctx->tb_ctx.tbs); + g_free(tcg_ctx->QREG_PC); + g_free(tcg_ctx->QREG_SR); + g_free(tcg_ctx->QREG_CC_OP); + g_free(tcg_ctx->QREG_CC_DEST); + g_free(tcg_ctx->QREG_CC_SRC); + g_free(tcg_ctx->QREG_CC_X); + g_free(tcg_ctx->QREG_DIV1); + g_free(tcg_ctx->QREG_DIV2); + g_free(tcg_ctx->QREG_MACSR); + g_free(tcg_ctx->QREG_MAC_MASK); + int i; + for (i = 0; i < 8; i++) { + g_free(tcg_ctx->cpu_dregs[i]); + g_free(tcg_ctx->cpu_aregs[i]); + } + g_free(tcg_ctx->NULL_QREG); + g_free(tcg_ctx->store_dummy); +} + void m68k_reg_reset(struct uc_struct *uc) { CPUArchState *env = uc->cpu->env_ptr; @@ -84,6 +109,7 @@ void m68k_uc_init(struct uc_struct* uc) register_accel_types(uc); m68k_cpu_register_types(uc); dummy_m68k_machine_init(uc); + uc->release = m68k_release; uc->reg_read = m68k_reg_read; uc->reg_write = m68k_reg_write; uc->reg_reset = m68k_reg_reset;