From: Daniel Jacobowitz <drow@false.org>
To: gdb@sources.redhat.com
Subject: What is "until" supposed to do?
Date: Wed, 23 Feb 2005 16:57:00 -0000 [thread overview]
Message-ID: <20050223162330.GA31074@nevyn.them.org> (raw)
The comment in infcmd.c:until_next_command says:
/* Proceed until we reach a different source line with pc greater than
our current one or exit the function. We skip calls in both cases.
Note that eventually this command should probably be changed so
that only source lines are printed out when we hit the breakpoint
we set. This may involve changes to wait_for_inferior and the
proceed status code. */
The documentation says:
Continue running until a source line past the current line, in the
current stack frame, is reached. This command is used to avoid
single stepping through a loop more than once. It is like the
`next' command, except that when `until' encounters a jump, it
automatically continues execution until the program counter is
greater than the address of the jump.
This means that when you reach the end of a loop after single
stepping though it, `until' makes your program continue execution
until it exits the loop. In contrast, a `next' command at the end
of a loop simply steps back to the beginning of the loop, which
forces you to step through the next iteration.
But then the documentation goes on to give an example that agrees with the
comment in until_next_command; it's about a PC greater than the current PC,
not a source line "past" the current line. If the test at the end of a loop
has the line number of the beginning of the loop, an "until" at the end of
the loop will go to the earlier source line, and another "until" will take
you out of the loop (wow, there's lots of room for basic block reordering to
break this command...).
I think that the example and comment are correct, and only the documentation
is wrong (or at least confusing). I'm not sure how to reword it though...
I noticed this problem because the mi-until.exp test case assumes the "past
the current line" behavior. It tests a loop:
while (i < 2)
i++;
The ARM compiler I am testing marks the jump after the increment as being
associated with the first line of the loop rather than the second, which
makes good sense, but fails the test.
--
Daniel Jacobowitz
CodeSourcery, LLC
next reply other threads:[~2005-02-23 16:23 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-23 16:57 Daniel Jacobowitz [this message]
2005-02-23 20:20 ` Eli Zaretskii
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=20050223162330.GA31074@nevyn.them.org \
--to=drow@false.org \
--cc=gdb@sources.redhat.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