qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/2] cpu: Add callback to check architectural wa


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH 1/2] cpu: Add callback to check architectural watchpoint match
Date: Fri, 18 Sep 2015 14:39:56 +0100

On 14 September 2015 at 11:50, Sergey Fedorov <address@hidden> wrote:
> When QEMU watchpoint matches, that is not definitely an architectural
> watchpoint match yet. If it is a stop-before-access watchpoint then that
> is hardly possible to ignore it after throwing a TCG exception.
>
> A special callback is introduced to check for architectural watchpoint
> match before raising a TCG exception.
>
> Signed-off-by: Sergey Fedorov <address@hidden>
> ---
>  exec.c            | 5 +++++
>  include/qom/cpu.h | 3 +++
>  qom/cpu.c         | 9 +++++++++
>  3 files changed, 17 insertions(+)
>
> diff --git a/exec.c b/exec.c
> index 54cd70a..64ed543 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1921,6 +1921,7 @@ static const MemoryRegionOps notdirty_mem_ops = {
>  static void check_watchpoint(int offset, int len, MemTxAttrs attrs, int 
> flags)
>  {
>      CPUState *cpu = current_cpu;
> +    CPUClass *cc = CPU_GET_CLASS(cpu);
>      CPUArchState *env = cpu->env_ptr;
>      target_ulong pc, cs_base;
>      target_ulong vaddr;
> @@ -1947,6 +1948,10 @@ static void check_watchpoint(int offset, int len, 
> MemTxAttrs attrs, int flags)
>              wp->hitattrs = attrs;
>              if (!cpu->watchpoint_hit) {
>                  cpu->watchpoint_hit = wp;
> +                if (wp->flags & BP_CPU && !cc->debug_check_watchpoint(cpu)) {
> +                    cpu->watchpoint_hit = NULL;
> +                    continue;
> +                }
>                  tb_check_watchpoint(cpu);
>                  if (wp->flags & BP_STOP_BEFORE_ACCESS) {
>                      cpu->exception_index = EXCP_DEBUG;

Missed this on first readthrough, but this code doesn't clear the
BP_WATCHPOINT_HIT flags from wp->flags if we decide that the
architectural watchpoint shouldn't fire. That means that next time
around when we call check_watchpoint() it might decide spruriously
that it should fire.

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]