From ed6c64489ef11d9ac5fb4b4c89d455a4f1ae8083 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Thu, 12 Nov 2015 15:10:43 +0000 Subject: target-arm: Update PC before calling gen_helper_check_breakpoints() PC should be updated in the CPU state before calling check_breakpoints() helper. Otherwise, the helper would not see the correct PC in the CPU state if it is not at the start of a TB. Signed-off-by: Sergey Fedorov Message-id: 1447176222-16401-1-git-send-email-serge.fdrv@gmail.com Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target-arm/translate-a64.c | 1 + target-arm/translate.c | 1 + 2 files changed, 2 insertions(+) diff --git a/target-arm/translate-a64.c b/target-arm/translate-a64.c index d7e09549c0..fe485a457d 100644 --- a/target-arm/translate-a64.c +++ b/target-arm/translate-a64.c @@ -11102,6 +11102,7 @@ void gen_intermediate_code_a64(ARMCPU *cpu, TranslationBlock *tb) QTAILQ_FOREACH(bp, &cs->breakpoints, entry) { if (bp->pc == dc->pc) { if (bp->flags & BP_CPU) { + gen_a64_set_pc_im(dc->pc); gen_helper_check_breakpoints(cpu_env); /* End the TB early; it likely won't be executed */ dc->is_jmp = DISAS_UPDATE; diff --git a/target-arm/translate.c b/target-arm/translate.c index a56f7fe532..43518541e1 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -11373,6 +11373,7 @@ void gen_intermediate_code(CPUARMState *env, TranslationBlock *tb) QTAILQ_FOREACH(bp, &cs->breakpoints, entry) { if (bp->pc == dc->pc) { if (bp->flags & BP_CPU) { + gen_set_pc_im(dc, dc->pc); gen_helper_check_breakpoints(cpu_env); /* End the TB early; it's likely not going to be executed */ dc->is_jmp = DISAS_UPDATE; -- cgit v1.2.3