qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 04/22] target-*: Introduce and use cpu_breakp


From: Sergey Fedorov
Subject: Re: [Qemu-devel] [PATCH v2 04/22] target-*: Introduce and use cpu_breakpoint_test
Date: Fri, 18 Sep 2015 20:08:40 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0

On 18.09.2015 18:40, Richard Henderson wrote:
> On 09/18/2015 03:32 AM, Peter Maydell wrote:
>>> +        if (unlikely(cpu_breakpoint_test(cs, dc->pc, BP_ANY))) {
>>> +            gen_exception_internal_insn(dc, 0, EXCP_DEBUG);
>>> +            /* Advance PC so that clearing the breakpoint will
>>> +               invalidate this TB.  */
>>> +            dc->pc += 2;
>>> +            goto done_generating;
>>> +        }
>>>          if (num_insns == max_insns && (tb->cflags & CF_LAST_IO)) {
>>>              gen_io_start();
>>>          }
>> Do you know why some but not all targets do this "advance PC"
>> thing if there's a breakpoint?
> No.  I don't believe I've seen it before yesterday.
>
> My suspicion is that if we have a TB that would span two pages, and the
> breakpoint is exactly at the page boundary, then we must advance the pc like
> this so that it's clear that the TB utilizes the second page.
>
> If so, it means that there are some targets that are broken based on this 
> (e.g.
> i386), and there are a few for which this situation is impossible, and this
> fixup is cargo culting (e.g. aarch64).
>

I noticed that this fixup is only used combined with thing like "goto
done_generating". Other targets terminate the loop only after translated
the insn, e.g. with "dc->is_jmp = DISAS_JUMP".

Best regards,
Sergey



reply via email to

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