This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA] Fix "break foo" when `foo's prologue ends before line table
> > I am wondering if this looping over all PSYMTAB and SYMTABs is really
> > necessary. Is the symtab associated to your symbol not sufficient?
>
> I must admit that I have only a very basic knowledge of symbol tables.
> In particular, I'm only vaguely familiar with the possible intricacies
> of symtabs in the presence of included files and such likes. I simply
> saw that find_line_symtab, which does a similar job, loops like that,
> so I used the same paradigm.
I think that the situation in this case is a little bit different,
since we're using the symtab coming from the symbol itself. You'd
expect that the associated linetable would be in that symtab...
I'm always reluctant to introduce code I don't understand, and usually
leave it out until I see a bug - that's why I was asking. Have you
tried without this part?
> > Also, instead of returning the line whose number is the smallest,
> > I would return the smallest PC, as we're trying to skip the minimum
> > before inserting the breakpoint.
>
> But the smallest PC could come from some source line that is further
> down in the function's body, source-wise, if the compiler rearranged
> code, couldn't it? What I'm trying to do is find the first source
> line of the body of the function, not the first PC of the body. I
> think the former is more in line with the semantics of "break FOO".
I would disagree with that. Imagine that you have function like this:
foo ()
{
a ();
b ();
}
If for some reason the optimizer rearanged the code like this:
foo ()
{
b ();
a ();
}
Do you really want "break foo" to break on the line where a () is
called? The problem with that is that, by the time we reach the
breakpoint, b would have already been called. My expection is that
the debugger should find the first line of code, not the line
whose number is the smallest. In other words, when I break on
a function, I expect that by the time I reach that function breakpoint,
none of the real code has been executed yet - I want to debug the
function :-).
> > This means that your iteration on the line table can stop as soon as
> > you've found a non-zero line that's inside your function address
> > range.
>
> Is it guaranteed that the line table is always sorted by PC?
Yep:
/* The order of entries in the linetable is significant. They should
be sorted by increasing values of the pc field.
--
Joel