Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Will Deacon <will.deacon@arm.com>
To: Pedro Alves <palves@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	  Joel Brobecker <brobecker@adacore.com>,
	  Marcus Shawcroft <marcus.shawcroft@gmail.com>,
	  Terry Guo <Terry.Guo@arm.com>,
	Marcus Shawcroft <Marcus.Shawcroft@arm.com>,
	  "lgustavo@codesourcery.com" <lgustavo@codesourcery.com>,
	  "yao@codesourcery.com" <yao@codesourcery.com>,
	  "gdb-patches@sourceware.org" <gdb-patches@sourceware.org>,
	  "Gareth, McMullin" <gareth@blacksphere.co.nz>
Subject: Re: [RFA/commit] arm-tdep.c: Do not single-step after hitting a watchpoint
Date: Tue, 30 Sep 2014 09:18:00 -0000	[thread overview]
Message-ID: <20140930091824.GE8075@arm.com> (raw)
In-Reply-To: <542A72F9.5090203@redhat.com>

On Tue, Sep 30, 2014 at 10:08:09AM +0100, Pedro Alves wrote:
> The report that confuses me is Gareth's:
> 
>   https://sourceware.org/ml/gdb/2014-09/msg00013.html
> 
> As it sounds like he has v7-m hardware that has asynchronous
> behavior.  Gareth, can you confirm this, please?

Running Linux or bare-metal? The hw_breakpoint code in the kernel certainly
wasn't written with v7-m in mind and I'd be surprised if it even probed
successfully at boot.

> Still, in any case, from that LKML post:
> 
>  "v6 cores are the opposite; they only generate asynchronous
>   watchpoint exceptions".
> 
> So, eh!?  Does your qemu patch take this into account?  Seems
> like it should.

Hmm, I didn't realise v6 was on the table here. In that case, you need to
signal an async exception and set the WFAR register to indicate the
watchpointed instruction. Not that Linux uses this...

> In Linux's sources I see this:
> 
> /* Determine number of usable WRPs available. */
> static int get_num_wrps(void)
> {
> 	/*
> 	 * On debug architectures prior to 7.1, when a watchpoint fires, the
> 	 * only way to work out which watchpoint it was is by disassembling
> 	 * the faulting instruction and working out the address of the memory
> 	 * access.
> 	 *
> 	 * Furthermore, we can only do this if the watchpoint was precise
> 	 * since imprecise watchpoints prevent us from calculating register
> 	 * based addresses.
> 	 *
> 	 * Providing we have more than 1 breakpoint register, we only report
> 	 * a single watchpoint register for the time being. This way, we always
> 	 * know which watchpoint fired. In the future we can either add a
> 	 * disassembler and address generation emulator, or we can insert a
> 	 * check to see if the DFAR is set on watchpoint exception entry
> 	 * [the ARM ARM states that the DFAR is UNKNOWN, but experience shows
> 	 * that it is set on some implementations].
> 	 */
> 	if (get_debug_arch() < ARM_DEBUG_ARCH_V7_1)
> 		return 1;
> 
> So, even on Linux, on v6, etc. (< v7.1), it seems to me that we're
> indeed very likely to get _asynchronous_ watchpoints reported to GDB,
> and so this in GDB:

The comment/code above is about finding the address of the memory access
that triggered the watchpoint, as opposed to the address of the instruction.
(e.g. if I load from address FOO, then I only get told about FOO in v7.1).

Will


  reply	other threads:[~2014-09-30  9:18 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-29 18:23 Peter Maydell
2014-09-29 22:15 ` Pedro Alves
2014-09-29 22:54   ` Peter Maydell
2014-09-30  9:08     ` Pedro Alves
2014-09-30  9:18       ` Will Deacon [this message]
2014-09-30 10:07         ` Pedro Alves
2014-09-30 10:18           ` Peter Maydell
2014-09-30 10:38             ` Pedro Alves
2014-09-30 10:01       ` Peter Maydell
2014-09-30 10:34         ` Pedro Alves
2014-09-30 12:54           ` Pedro Alves
2014-09-30 13:50             ` Joel Brobecker
2014-09-30 14:11               ` Pedro Alves
2014-09-30 14:26                 ` Joel Brobecker
2014-09-30 14:50                   ` Peter Maydell
2014-09-30  8:57 ` Will Deacon
2014-09-30  9:04   ` Will Deacon
2014-09-30  9:14   ` Pedro Alves
2014-09-30  9:24     ` Will Deacon
  -- strict thread matches above, loose matches on Subject: below --
2014-09-15 13:01 Joel Brobecker
2014-09-16 11:12 ` Yao Qi
2014-09-16 11:59   ` Joel Brobecker
2014-09-16 12:05     ` Luis Machado
2014-09-16 12:48       ` Joel Brobecker
2014-09-16 13:09         ` Luis Machado
2014-09-16 15:21           ` Pedro Alves
2014-09-18 11:40             ` Marcus Shawcroft
2014-09-19 17:31               ` Pedro Alves
2014-09-29 17:51                 ` Joel Brobecker
2014-09-29 17:57                   ` Luis Machado
2014-09-29 21:04                   ` Pedro Alves
2014-09-30  8:54                     ` Will Deacon

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=20140930091824.GE8075@arm.com \
    --to=will.deacon@arm.com \
    --cc=Marcus.Shawcroft@arm.com \
    --cc=Terry.Guo@arm.com \
    --cc=brobecker@adacore.com \
    --cc=gareth@blacksphere.co.nz \
    --cc=gdb-patches@sourceware.org \
    --cc=lgustavo@codesourcery.com \
    --cc=marcus.shawcroft@gmail.com \
    --cc=palves@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=yao@codesourcery.com \
    /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