From: Daniel Jacobowitz <drow@false.org>
To: Tzu-Chien Chiu <tzuchien.chiu@gmail.com>
Cc: gdb@sourceware.org
Subject: Re: remote software breakpoint technical detail
Date: Wed, 03 May 2006 18:08:00 -0000 [thread overview]
Message-ID: <20060503180851.GA10793@nevyn.them.org> (raw)
In-Reply-To: <4d77c5f20605031043t256b1c05o3d9bb27beef8ed33@mail.gmail.com>
On Thu, May 04, 2006 at 01:43:07AM +0800, Tzu-Chien Chiu wrote:
> 5) the processor fetches the breakpoint instruction into the execution
> pipeline, and point pc to the next instruction
> 6) the breakpoint instruction is decoded, recognized, and the processor
> stalls
> 7) gdb restores instruction foo
> 8) the user issues the single instruction step ('si'), and he expects
> instruction foo be executed next, but...
>
> The question is:
>
> What value of pc should be expected after step 5 completes?
The correct answer is "it depends". In GDB, this is controlled by
"set_gdbarch_decr_pc_after_break", and most architectures use whichever
setting is more reasonable for their architecture. For yours, it
sounds like you want to have GDB decrement the PC after breakpoints.
It will write to the PC register itself.
> if $pc==foo+4, foo won't be executed but the following instruction,
> which is incorrect.
>
> if $pc==foo, the breakpoint instruction _has been_ fetched into the
> execution pipeline at step 5, what makes the cpu to *fetch again* the
> instruction restored by gdb at step 7? GDB or the hardware must be
> designed to do so?
This is an issue whether or not you decrement PC. In the presence of
debugger modification of code, something must flush the pipeline. I
am not familiar with how other targets do this; I suspect that whatever
is mediating between GDB and the target CPU is responsible (e.g. a
standalone JTAG box or an independent debug server running on the host).
--
Daniel Jacobowitz
CodeSourcery
next prev parent reply other threads:[~2006-05-03 18:08 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-05-03 17:43 Tzu-Chien Chiu
2006-05-03 18:08 ` Daniel Jacobowitz [this message]
2006-05-03 18:49 ` Paul Koning
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=20060503180851.GA10793@nevyn.them.org \
--to=drow@false.org \
--cc=gdb@sourceware.org \
--cc=tzuchien.chiu@gmail.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