From 92243aefd431ae10325df8ae2da3ced7fd683772 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sun, 7 Feb 2021 19:14:32 +0000 Subject: [PATCH] arm/translate: Do not tracecode when in an IT block --- qemu/target/arm/translate.c | 8 +++++--- qemu/target/arm/unicorn_arm.c | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/qemu/target/arm/translate.c b/qemu/target/arm/translate.c index 3fde781c..8a89682e 100644 --- a/qemu/target/arm/translate.c +++ b/qemu/target/arm/translate.c @@ -10151,9 +10151,11 @@ static void thumb_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) // Unicorn: trace this instruction on request const uint32_t insn_size = is_16bit ? 2 : 4; if (HOOK_EXISTS_BOUNDED(dc->uc, UC_HOOK_CODE, dc->base.pc_next - insn_size)) { - gen_uc_tracecode(tcg_ctx, insn_size, UC_HOOK_CODE_IDX, dc->uc, dc->base.pc_next - insn_size); - // the callback might want to stop emulation immediately - check_exit_request(tcg_ctx); + if (!dc->condexec_mask) { + gen_uc_tracecode(tcg_ctx, insn_size, UC_HOOK_CODE_IDX, dc->uc, dc->base.pc_next - insn_size); + // the callback might want to stop emulation immediately + check_exit_request(tcg_ctx); + } } if (is_16bit) { diff --git a/qemu/target/arm/unicorn_arm.c b/qemu/target/arm/unicorn_arm.c index 6c37a56a..d4db6752 100644 --- a/qemu/target/arm/unicorn_arm.c +++ b/qemu/target/arm/unicorn_arm.c @@ -9,6 +9,7 @@ #include "unicorn.h" #include "unicorn_common.h" #include "uc_priv.h" +#include "exec/helper-proto.h" const int ARM_REGS_STORAGE_SIZE = offsetof(CPUARMState, tlb_table);