From c0ab026e786645c524c90a24741f019f38d02358 Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Fri, 9 Mar 2018 01:15:55 -0500 Subject: [PATCH] target/m68k: TCGv returned by gen_load() must be freed Backports commit 24989f0e21cc9cd90237d4836a456c3ffb824b3e from qemu --- qemu/target/m68k/translate.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/qemu/target/m68k/translate.c b/qemu/target/m68k/translate.c index 895d9e0e..eef25fd6 100644 --- a/qemu/target/m68k/translate.c +++ b/qemu/target/m68k/translate.c @@ -2962,6 +2962,7 @@ DISAS_INSN(unlk) tcg_gen_mov_i32(tcg_ctx, reg, tmp); tcg_gen_addi_i32(tcg_ctx, QREG_SP, src, 4); tcg_temp_free(tcg_ctx, src); + tcg_temp_free(tcg_ctx, tmp); } #if defined(CONFIG_SOFTMMU) @@ -3259,6 +3260,9 @@ DISAS_INSN(subx_mem) gen_subx(s, src, dest, opsize); gen_store(s, opsize, addr_dest, tcg_ctx->QREG_CC_N, IS_USER(s)); + + tcg_temp_free(tcg_ctx, dest); + tcg_temp_free(tcg_ctx, src); } DISAS_INSN(mov3q) @@ -3486,6 +3490,9 @@ DISAS_INSN(addx_mem) gen_addx(s, src, dest, opsize); gen_store(s, opsize, addr_dest, tcg_ctx->QREG_CC_N, IS_USER(s)); + + tcg_temp_free(tcg_ctx, dest); + tcg_temp_free(tcg_ctx, src); } static inline void shift_im(DisasContext *s, uint16_t insn, int opsize) @@ -4573,6 +4580,8 @@ DISAS_INSN(chk2) gen_flush_flags(s); gen_helper_chk2(tcg_ctx, tcg_ctx->cpu_env, reg, bound1, bound2); tcg_temp_free(tcg_ctx, reg); + tcg_temp_free(tcg_ctx, bound1); + tcg_temp_free(tcg_ctx, bound2); } static void m68k_copy_line(DisasContext *s, TCGv dst, TCGv src, int index) @@ -4727,6 +4736,7 @@ DISAS_INSN(moves) } else { gen_partset_reg(s, opsize, reg, tmp); } + tcg_temp_free(tcg_ctx, tmp); } switch (extract32(insn, 3, 3)) { case 3: /* Indirect postincrement. */ @@ -5747,6 +5757,7 @@ DISAS_INSN(mac) case 4: /* Pre-decrement. */ tcg_gen_mov_i32(tcg_ctx, AREG(insn, 0), addr); } + tcg_temp_free(tcg_ctx, loadval); } }