This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: mi-until.exp failures


On Fri, Mar 03, 2006 at 03:03:50PM +0000, Paul Brook wrote:
> I'm seeing the following failures on arm-none-eabi with a gcc4.x compiler:
> 
> FAIL: gdb.mi/mi-until.exp: until after while loop (timeout)
> FAIL: gdb.mi/mi2-until.exp: until after while loop (timeout)
> 
> Turns out that this the "until" command actuig in unexpected ways, as
> described in this thread:
> http://sources.redhat.com/ml/gdb/2005-02/msg00151.html
> 
> AFAICS there's not been any real consensus whether this is a bug or a feature. 
> I've had a quick look at making the command work purely on source lines,
> and concluded I don't have the time/inclination to make it work. I just want
> to squish the unexpected testsuite failure.

I see that I never responded to Eli last February; lo and behold, it's
two of the 528 new messages in my gdb@ folder.  Shame on me.

I just went through until_next_command and next_command/step_1 line by
line.  The current implementation of until_next_command is similar to
"next", except that the stepping range is from the start of the
function to the current PC; so it is clearly "step until a higher PC"
[I had to look a couple of times to figure out how it worked].  It's
been that way since before the dawn of recorded cvs annotate.

Here's what the documentation actually 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.

The first two sentences agree with the testcase.  The next sentence
describes what is actually implemented.  The second paragraph concludes
that the two are equivalent.  This was clearly the case in a previous
generation of compilers, but it isn't any more.

So:

> b) Decide this is a bug. I will file a bug and kfail the testcase.
> 
> Ok? PASS or KFAIL?

> 2006-03-03  Paul Brook  <paul@codesourcery.com>
> 
> 	* gdb.mi/mi-until.exp: kfail broken until command.
> 	* gdb.mi/mi2-until.exp: Ditto.

I'll approve this one.  It's actually in the test_until function, by
the way.

It's a bug; it would be nice if someone fixed it, but infrun may need
some care and attention first.

-- 
Daniel Jacobowitz
CodeSourcery


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]