Re: [RFA] Fix "break foo" when `foo's prologue ends before line table

Joel Brobecker
2009-05-11T19:27:28Z

> > 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