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


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