qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <rth@twiddle.net>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
	"QEMU Developers" <qemu-devel@nongnu.org>,
	"Aurelien Jarno" <aurelien@aurel32.net>
Subject: Re: [Qemu-devel] [PATCH v2 04/22] target-*: Introduce and use cpu_breakpoint_test
Date: Fri, 18 Sep 2015 08:40:16 -0700	[thread overview]
Message-ID: <55FC3060.3010304@twiddle.net> (raw)
In-Reply-To: <CAFEAcA9aqH2g6M8KO5kM+eO-RQ-sY9NAkj+7QN2SZBamYQHM2Q@mail.gmail.com>

On 09/18/2015 03:32 AM, Peter Maydell wrote:
>> +/* Return true if PC matches an installed breakpoint.  */
>> +static inline bool cpu_breakpoint_test(CPUState *cpu, vaddr pc, int mask)
>> +{
>> +    CPUBreakpoint *bp;
>> +
>> +    if (unlikely(!QTAILQ_EMPTY(&cpu->breakpoints))) {
>> +        QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) {
>> +            if (bp->pc == pc && (bp->flags & mask)) {
>> +                return true;
>> +            }
>> +        }
>> +    }
>> +    return false;
>> +}
> 
> This won't work with the fix for ARM breakpoints Sergey currently has
> on list: http://patchwork.ozlabs.org/patch/517359/
> where we need to behave differently for "there's a GDB breakpoint
> here" and "there's a CPU breakpoint here" (because the complex
> conditions on the latter require us to call a helper function to
> see if we need to actually generate an EXCP_DEBUG exception).

Hmm.  Ok, well, I suppose it might do for all but one target then...

>> +        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).


r~

  parent reply	other threads:[~2015-09-18 15:40 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-18  4:55 [Qemu-devel] [PATCH v2 00/22] Do away with TB retranslation Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 01/22] tcg: Rename debug_insn_start to insn_start Richard Henderson
2015-09-21 16:44   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 02/22] target-*: Unconditionally emit tcg_gen_insn_start Richard Henderson
2015-09-21 16:43   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 03/22] target-*: Increment num_insns immediately after tcg_gen_insn_start Richard Henderson
2015-09-18 12:00   ` Peter Maydell
2015-09-21 16:43   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 04/22] target-*: Introduce and use cpu_breakpoint_test Richard Henderson
2015-09-18 10:32   ` Peter Maydell
2015-09-18 12:48     ` Sergey Fedorov
2015-09-18 15:40     ` Richard Henderson [this message]
2015-09-18 17:08       ` Sergey Fedorov
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 05/22] tcg: Allow extra data to be attached to insn_start Richard Henderson
2015-09-21 22:24   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 06/22] target-arm: Add condexec state " Richard Henderson
2015-09-21 22:25   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 07/22] target-i386: Add cc_op " Richard Henderson
2015-09-21 22:25   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 08/22] target-mips: Add delayed branch " Richard Henderson
2015-09-21 22:25   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 09/22] target-s390x: Add cc_op " Richard Henderson
2015-09-21 22:25   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 10/22] target-sh4: Add flags " Richard Henderson
2015-09-21 22:26   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 11/22] target-cris: Mirror gen_opc_pc into insn_start Richard Henderson
2015-09-22 16:45   ` Aurelien Jarno
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 12/22] target-sparc: Tidy gen_branch_a interface Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 13/22] target-sparc: Split out gen_branch_n Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 14/22] target-sparc: Remove gen_opc_jump_pc Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 15/22] target-sparc: Add npc state to insn_start Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 16/22] tcg: Merge cpu_gen_code into tb_gen_code Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 17/22] target-*: Drop cpu_gen_code define Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 18/22] tcg: Add TCG_MAX_INSNS Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 19/22] tcg: Pass data argument to restore_state_to_opc Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 20/22] tcg: Save insn data and use it in cpu_restore_state_from_tb Richard Henderson
2015-09-18 13:08   ` Peter Maydell
2015-09-18 16:18     ` Richard Henderson
2015-09-18 22:44       ` Peter Maydell
2015-09-19  2:05         ` Richard Henderson
2015-09-19 21:02     ` Richard Henderson
2015-09-19 21:55       ` Peter Maydell
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 21/22] tcg: Remove gen_intermediate_code_pc Richard Henderson
2015-09-18  4:55 ` [Qemu-devel] [PATCH v2 22/22] tcg: Remove tcg_gen_code_search_pc Richard Henderson
2015-09-18 14:42 ` [Qemu-devel] [PATCH v2 00/22] Do away with TB retranslation Leon Alrae

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=55FC3060.3010304@twiddle.net \
    --to=rth@twiddle.net \
    --cc=alex.bennee@linaro.org \
    --cc=aurelien@aurel32.net \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).