public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: Johan Rydberg <jrydberg@virtutech.com>,
	dan@shearer.org, gdb@sources.redhat.com
Subject: Re: [discuss] Support for reverse-execution
Date: Fri, 20 May 2005 13:14:00 -0000	[thread overview]
Message-ID: <20050520131348.GB25206@nevyn.them.org> (raw)
In-Reply-To: <01c55d27$Blat.v2.4$69471120@zahav.net.il>

Disclaimer: I have not looked at the code at all; I want to get the
copyright assignment rolling first.

On Fri, May 20, 2005 at 01:32:47PM +0300, Eli Zaretskii wrote:
> > To implement "rnext" I had to add a new target-specific function that
> > tries to figure out the address of the call instruction based on the
> > last executed instruction and the instruction to be executed, IF the
> > current instruction can be identified as a return insn.

Johan, when I sketched out some algorithms for implementing these
commands, I got the feeling that this was not a good way to do it.
There are just too many ways to jump, and they can be pretty tricky to
recognize on some architectures.  PowerPC is easy, but it's a little
more complicated to disassemble starting from the end of an instruction
on ia32.  Here's another one that requires absolutely no target support:
  - Detect reverse-step into a function
  - Set breakpoints at all entry points of the function; GDB doesn't
    support multiple entry points yet, really, so a breakpoint at
    the first instruction and a big fat comment is all this takes.
  - When you hit an entry point breakpoint, reverse-step once more.
  - If you have entered a different function, for instance via a
    reversed tail call, and you can still see the desired frame
    on the stack, then repeat.

i.e. build reverse-next on top of reverse-finish.  reverse-finish
should take you to the intermediate caller in a tail call situation,
not to the previous frame on the stack.

Of course neither algorithm is robust in the case of stray jumps. 
Bookmarks and single-steps for that are the best we're going to get.

> > +  add_com ("rnext", class_run, rnext_command,
> > +           "Step program until it reaches the previous source line.\n\
> 
> "Go backwards until the program reaches the source line before the
> current one."

Johan used previous, you used backwards; let's figure out what we're
calling the commands first :-P

> > +   add_com_alias ("rn", "rnext", class_run, 1);
> 
> Do we want another alias called "previous"?

I have no objection.

> I'd prefer that target_resume accepted the direction argument.  Is
> there something that I'm missing that makes this hard or impossible?

It should either be an argument, or a separate target hook as Michael
proposed.  No existing target supports it, so it would save us updating
all targets to reject it.  Which is just mechanical, so I don't feel
strongly either way.

-- 
Daniel Jacobowitz
CodeSourcery, LLC

  parent reply	other threads:[~2005-05-20 13:14 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-19  1:23 Dan Shearer
2005-05-19 13:01 ` Johan Rydberg
2005-05-19 13:18   ` Daniel Jacobowitz
2005-05-19 13:47     ` Johan Rydberg
2005-05-20 10:37   ` Eli Zaretskii
2005-05-20 11:37     ` Andreas Schwab
2005-05-20 13:18       ` Daniel Jacobowitz
2005-05-20 13:36         ` Fabian Cenedese
2005-05-20 13:47           ` Daniel Jacobowitz
2005-05-20 14:41       ` Eli Zaretskii
2005-05-20 22:14         ` Daniel Jacobowitz
2005-05-20 12:22     ` Johan Rydberg
2005-05-20 13:19       ` Daniel Jacobowitz
2005-05-20 14:12       ` Eli Zaretskii
2005-05-20 13:14     ` Daniel Jacobowitz [this message]
2005-05-20 14:34       ` Eli Zaretskii
2005-05-20 15:40       ` Johan Rydberg
2005-05-20 10:47 ` Eli Zaretskii
  -- strict thread matches above, loose matches on Subject: below --
2005-05-21 15:53 Paul Schlie
2005-05-20 22:11 Michael Snyder
2005-05-20 23:32 ` Paul Schlie
2005-05-20 21:59 Michael Snyder
2005-05-20 21:51 Michael Snyder
2005-05-21  9:44 ` Eli Zaretskii
2005-05-20 21:44 Michael Snyder
2005-05-20 21:25 Michael Snyder
2005-05-20 21:16 Michael Snyder
2005-05-20 21:31 ` Daniel Jacobowitz
2005-05-21  9:39 ` Eli Zaretskii
2005-05-23 18:19   ` Michael Snyder
2005-05-20 21:11 Michael Snyder
2005-05-20 21:27 ` Daniel Jacobowitz
2005-05-20 19:02 Michael Snyder
2005-05-20 20:43 ` Eli Zaretskii
2005-05-20 21:03   ` Michael Snyder
2005-05-20 15:49 Paul Schlie
2005-05-20 17:41 ` Dan Shearer
2005-05-20 22:01   ` Paul Schlie
2005-05-20 22:08     ` Daniel Jacobowitz
2005-05-20 22:43       ` Paul Schlie
2005-05-21  0:58         ` Daniel Jacobowitz
2005-05-21  1:42           ` Paul Schlie
2005-05-21  1:53             ` Daniel Jacobowitz
2005-05-21  1:56               ` Daniel Jacobowitz
2005-05-21 15:03                 ` Paul Schlie
2005-05-21 14:13               ` Paul Schlie
2005-05-21 14:23                 ` Daniel Jacobowitz
2005-05-21 15:04                   ` Paul Schlie
2005-05-20 20:58 ` Michael Snyder
2005-05-20 21:35   ` Paul Schlie
2005-05-16 17:47 Dan Shearer
2005-05-16 18:04 ` Dan Shearer
2005-05-20 18:15 ` Daniel Jacobowitz
2005-05-21  0:05   ` Frank Ch. Eigler
2005-05-21 10:13     ` Eli Zaretskii
2005-05-21 10:28       ` Russell Shaw
2005-05-21 12:38         ` Eli Zaretskii
2005-05-21 12:55           ` Russell Shaw
2005-05-21 14:39           ` Russell Shaw
2005-05-21 14:19       ` Daniel Jacobowitz
2005-05-21 15:46         ` Eli Zaretskii
2005-05-21 17:43           ` Daniel Jacobowitz
2005-05-23 19:39             ` Dan Shearer
2005-05-12 23:08 Michael Snyder
2005-05-13  6:23 ` Eli Zaretskii
2005-05-19 13:46   ` Daniel Jacobowitz
2005-05-19 18:46     ` Michael Snyder
2005-05-19 19:26       ` Johan Rydberg
2005-05-20 10:55     ` Eli Zaretskii
2005-05-20 13:04       ` Daniel Jacobowitz
2005-05-20 14:30         ` Eli Zaretskii
2005-05-20 14:43           ` Andreas Schwab
2005-05-20 20:48         ` Michael Snyder
2005-05-20 20:51           ` Daniel Jacobowitz
2005-05-20 20:38     ` Michael Snyder
2005-05-20 15:05 ` Vladimir Prus
2005-05-20 15:58   ` Eli Zaretskii
2005-05-20 18:14     ` Daniel Jacobowitz
2005-05-20 18:30       ` Eli Zaretskii
2005-05-20 19:27   ` Stan Shebs

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=20050520131348.GB25206@nevyn.them.org \
    --to=drow@false.org \
    --cc=dan@shearer.org \
    --cc=eliz@gnu.org \
    --cc=gdb@sources.redhat.com \
    --cc=jrydberg@virtutech.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).