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: [PATCH 3/5] range stepping: gdb


On 05/14/2013 08:46 PM, Eli Zaretskii wrote:
>> From: Pedro Alves <palves@redhat.com>
>> Date: Tue, 14 May 2013 20:10:47 +0100
>>
>> When user issues the "step" command on the following line of source,
>>
>>    a = b + c + d * e - a;
>>
>> GDB single-steps every single instruction until the program reaches a
>> new different line.
> 
> I always thought that GDB sets a temporary breakpoint at the end, and
> then lets the target run freely.  Why not?

Because we don't know whether there are instructions in the line that
jump/branch to a different place.  We'd miss the breakpoint and lose
control.

> 
>> +@var{end} is the address of the first instruction beyond the step
>> +range, and @strong{not} the address of the last instruction within it.
>> +(This has the property that @var{start} == @var{end} single-steps
>> +once, and only once, even if the instruction at @var{start} jumps to
>> +@var{end}.)
> 
> This sentence in parentheses got me completely confused.  Before
> reading it, I thought I understood what is this about; now I don't.
> In particular, if START is equal to END, then how in the world could
> the instruction at START jump to END?

Sorry, I had that typo in the gdbserver code as well, fixed it
there, but missed this one.

It should read, even if the instruction at @var{start} jumps to @var{start}.

vCont;r first steps, then checks.  IOW:

 vCont ;r ADDR1,ADDR1

is equivalent to (and could be thought to supersede):

 vCont ;s

> And if END is excluded from the
> range, then why when START equals END do we step at all?  Please
> explain.

It's just a design decision.  I recall at least one target I saw I worked
with that supported range stepping, and it didn't even a distinction
between range vs no-range step commands.  The way to do a single step
was to pass both addresses the same.  I find it a better design than
requiring the target do one current-address check _before_ stepping,
and another _after_ single-stepping.

-- 
Pedro Alves


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