Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* GDB cannot find line info
@ 2009-09-18 16:12 Christophe LYON
  2009-09-18 16:27 ` Frédéric RISS
  2009-09-19 16:40 ` Joel Brobecker
  0 siblings, 2 replies; 9+ messages in thread
From: Christophe LYON @ 2009-09-18 16:12 UTC (permalink / raw)
  To: gdb

Hello,

I have found a bug in our compiler (Open64 for ST200), which I have 
fixed to make it correctly output the directory table related to 
debug_line info.
But now, I have many regressions in the GDB testsuite (6.8), the first 
one being in break.exp: now the command "break break.c:103" returns 'No 
line 103 in file "break.c"'

I have dumped the dwarf debug_line info with 'dwarfdump -l' and 'readelf 
-wl', but could not find anything suspect:
- with dwarfdump, the only difference is in the directory path
- with readelf, the directory tables contain one more entry (absolute 
path to gdb.base) and the file table has dir numbers updated 
accordingly. (obviously, the length and offset of the corresponding 
sections are different)

Is there any GDB internal command I could use to understand the problem?

Thanks,

Christophe.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: GDB cannot find line info
  2009-09-18 16:12 GDB cannot find line info Christophe LYON
@ 2009-09-18 16:27 ` Frédéric RISS
  2009-09-18 16:33   ` Frederic Riss
  2009-09-19 16:40 ` Joel Brobecker
  1 sibling, 1 reply; 9+ messages in thread
From: Frédéric RISS @ 2009-09-18 16:27 UTC (permalink / raw)
  To: Christophe LYON; +Cc: gdb

Hi Christophe,

On ven., 2009-09-18 at 18:11 +0200, Christophe LYON wrote:
> But now, I have many regressions in the GDB testsuite (6.8), the
> first 
> one being in break.exp: now the command "break break.c:103" returns
> 'No 
> line 103 in file "break.c"'

I thought that got reported internally at ST. I'm quite sure that the
issue is Open64 not setting the is_stmt flag, and newer GDBs discarding
any line info not marked as such:

http://sourceware.org/ml/gdb-patches/2009-06/msg00633.html

Fred


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: GDB cannot find line info
  2009-09-18 16:27 ` Frédéric RISS
@ 2009-09-18 16:33   ` Frederic Riss
  0 siblings, 0 replies; 9+ messages in thread
From: Frederic Riss @ 2009-09-18 16:33 UTC (permalink / raw)
  To: Christophe LYON; +Cc: gdb

2009/9/18 Frédéric RISS <frederic.riss@gmail.com>:
> On ven., 2009-09-18 at 18:11 +0200, Christophe LYON wrote:
>> But now, I have many regressions in the GDB testsuite (6.8), the
>> first
>> one being in break.exp: now the command "break break.c:103" returns
>> 'No
>> line 103 in file "break.c"'
>
> I thought that got reported internally at ST. I'm quite sure that the
> issue is Open64 not setting the is_stmt flag, and newer GDBs discarding
> any line info not marked as such:
>
> http://sourceware.org/ml/gdb-patches/2009-06/msg00633.html

Oops. Seems I've answered too fast as you point out you're using 6.8
and that behavior is more recent... The issue must be different.

Fred


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: GDB cannot find line info
  2009-09-18 16:12 GDB cannot find line info Christophe LYON
  2009-09-18 16:27 ` Frédéric RISS
@ 2009-09-19 16:40 ` Joel Brobecker
  1 sibling, 0 replies; 9+ messages in thread
From: Joel Brobecker @ 2009-09-19 16:40 UTC (permalink / raw)
  To: Christophe LYON; +Cc: gdb

> Is there any GDB internal command I could use to understand the problem?

try the GDB/MI -symbol-list-lines command to dump the line table as
known by GDB. Looks like it might be empty... After that, the only
method I know to diagnose this sort of issue is debugging GDB while
it is reading the line table.

-- 
Joel


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: GDB cannot find line info
  2009-09-22 16:04     ` Christophe LYON
@ 2009-09-25 15:37       ` Christophe LYON
  0 siblings, 0 replies; 9+ messages in thread
From: Christophe LYON @ 2009-09-25 15:37 UTC (permalink / raw)
  To: gdb


Hi,

I have made some progress on my problem: our compiler did not generate 
the full source pathname in the Dwarf2 compile unit (it added only the 
basename).
Making the compiler generate the full source pathname did fix the 
regression I observed in the GDB testsuite.

I report this here because, despite investigating for quite some time, I 
couldn't figure what actually confused GDB.

It looks a bit like what was already fixed by 
http://sourceware.org/ml/gdb-patches/2008-04/msg00158.html
so maybe there is another inconsistency case that could be supported by GDB?

Christophe.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: GDB cannot find line info
  2009-09-21 15:35   ` Christophe LYON
@ 2009-09-22 16:04     ` Christophe LYON
  2009-09-25 15:37       ` Christophe LYON
  0 siblings, 1 reply; 9+ messages in thread
From: Christophe LYON @ 2009-09-22 16:04 UTC (permalink / raw)
  To: gdb

Hi,

Merging the patch mentioned earlier does fix most of the regressions I 
introduced after "fixing" our compiler, but there is still 1 regression 
left, which I fail to understand.

In langs.exp, I have now 1 failure:
up
#3  0x080003e4 in fsub_ ()
Current language:  auto; currently fortran
(gdb) FAIL: gdb.base/langs.exp: up to fsub in langs.exp


Remember, the difference between a "langs" executable that passes the 
test, and one that fails is the correct inclusion of the full dirname of 
the source file in the debug_line directory table.

I am using GDB 6.8 ported to ST200.

I have dumped the debug information in various ways:
* As suggested by Joel, with MI -symbol-list-lines
   Gives the very same results in both cases:
(gdb) -symbol-list-lines langs1.c
^done,lines=[{pc="0x080003a0",line="24"},{pc="0x080003a4",line="0"},{pc="0x080003a4",line="25"},{pc="0x080003a8",line="0"},{pc="0x080 
3a8",line="0"},{pc="0x080003b0",line="0"},{pc="0x080003bc",line="0"}]
(gdb) -symbol-list-lines langs1.f
^done,lines=[{pc="0x080003a8",line="5"},{pc="0x080003b0",line="0"},{pc="0x080003b0",line="6"},{pc="0x080003bc",line="0"},{pc="0x08000 
c",line="6"},{pc="0x080003c8",line="0"}]

* Using "maintenance print symbols":
- in the failing case, the data for "langs1.f" is dumped first, while it 
appears at the end of the dump in the other case.
- in the failing case, langs1.c is prefixed with its full path name.

* Using readelf -wl:
- the failing case has 1 entry in the directory table for langs1.o (full 
dirname for langs1.c) and langs1.c references it.
- In the executable which passes the test, the directory table for 
langs1.o is empty, and langs1.c has "0" as directory.

In both cases, langs1.f has "0" as directory.

* Using dwarfdump on langs1.o,
- DW_AT_decl_file attributes pointing to langs1.c show the full path in 
the failing case, and langs1.f (full path) has the hostname as prefix.
- In the object file which passes the test, the full path of langs1.c 
and langs1.f has always the hostname as prefix.

- the same difference appears in the debug_line dump.


It looks a bit like the problem I had several months ago 
(http://sourceware.org/ml/gdb-patches/2009-03/msg00617.html).

All the information I managed to dump looks correct to me, but GDB is 
still unhappy :-(

Any suggestion appreciated :-)

Thanks
Christophe.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: GDB cannot find line info
  2009-09-21 15:00 ` Christophe LYON
@ 2009-09-21 15:35   ` Christophe LYON
  2009-09-22 16:04     ` Christophe LYON
  0 siblings, 1 reply; 9+ messages in thread
From: Christophe LYON @ 2009-09-21 15:35 UTC (permalink / raw)
  To: Robert Bu; +Cc: gdb

I have investigated a bit more, and the GDB patch actually seems to 
match perfectly my compiler behavior... maybe it was designed for 
another port of Open64 ;-)

For the record, debug_line describes only the source file basename + 
reference to the full path, while debug_info uses the full path name.

Hence, the same basename appears twice in GDB line table, but one of the 
entries has an empty line table (the one from debug_info).

Thanks for your help!

Christophe.


On 21.09.2009 17:00, Christophe LYON wrote:
> Hi Robert,
> 
> Thanks for the suggestion, indeed it has fixed my problem, though I 
> don't really understand why :-)
> 
> I tried Joel's suggestion, and indeed the line table is empty.
> I have tried comparing the output of "maintenance print symbols" between 
>  executable files generated by 2 compilers (on break.c from the 
> testsuite), and:
> * with the compiler with the bug (incorrect source directory), Symtab 
> for break.c appears once, with a line table
> * with the compiler with my fix, Symtab for break.c appears twice, once 
> with only "break.c" and no line table, and once with the full path to 
> "break.c" and the right line table.
> 
> Christophe.
> 
> 
> On 21.09.2009 09:45, Robert Bu wrote:
>> Hi Christophe,
>>
>> Maybe you can try the CVS head or the 7.0 preview. I've once met the
>> same problem. And the problem is gone in CVS. Actually the problem is
>> fixed by the newly added function "watch_main_source_file_lossage
>> (void)" in buildsym.c
>>
>> Robert.
>>
>>>
>>> Hello,
>>>
>>> I have found a bug in our compiler (Open64 for ST200), which I have
>>> fixed to make it correctly output the directory table related to
>>> debug_line info.
>>> But now, I have many regressions in the GDB testsuite (6.8), the first
>>> one being in break.exp: now the command "break break.c:103" returns
>>> 'No line 103 in file "break.c"'
>>>
>>> I have dumped the dwarf debug_line info with 'dwarfdump -l' and
>>> 'readelf -wl', but could not find anything suspect:
>>> - with dwarfdump, the only difference is in the directory path
>>> - with readelf, the directory tables contain one more entry (absolute
>>> path to gdb.base) and the file table has dir numbers updated
>>> accordingly. (obviously, the length and offset of the corresponding
>>> sections are different)
>>>
>>> Is there any GDB internal command I could use to understand the problem?
>>>
>>> Thanks,
>>>
>>> Christophe.
>>>
>>
> 
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: GDB cannot find line info
  2009-09-21  7:45 Robert Bu
@ 2009-09-21 15:00 ` Christophe LYON
  2009-09-21 15:35   ` Christophe LYON
  0 siblings, 1 reply; 9+ messages in thread
From: Christophe LYON @ 2009-09-21 15:00 UTC (permalink / raw)
  To: Robert Bu; +Cc: gdb

Hi Robert,

Thanks for the suggestion, indeed it has fixed my problem, though I 
don't really understand why :-)

I tried Joel's suggestion, and indeed the line table is empty.
I have tried comparing the output of "maintenance print symbols" between 
  executable files generated by 2 compilers (on break.c from the 
testsuite), and:
* with the compiler with the bug (incorrect source directory), Symtab 
for break.c appears once, with a line table
* with the compiler with my fix, Symtab for break.c appears twice, once 
with only "break.c" and no line table, and once with the full path to 
"break.c" and the right line table.

Christophe.


On 21.09.2009 09:45, Robert Bu wrote:
> Hi Christophe,
> 
> Maybe you can try the CVS head or the 7.0 preview. I've once met the
> same problem. And the problem is gone in CVS. Actually the problem is
> fixed by the newly added function "watch_main_source_file_lossage
> (void)" in buildsym.c
> 
> Robert.
> 
>>
>> Hello,
>>
>> I have found a bug in our compiler (Open64 for ST200), which I have
>> fixed to make it correctly output the directory table related to
>> debug_line info.
>> But now, I have many regressions in the GDB testsuite (6.8), the first
>> one being in break.exp: now the command "break break.c:103" returns
>> 'No line 103 in file "break.c"'
>>
>> I have dumped the dwarf debug_line info with 'dwarfdump -l' and
>> 'readelf -wl', but could not find anything suspect:
>> - with dwarfdump, the only difference is in the directory path
>> - with readelf, the directory tables contain one more entry (absolute
>> path to gdb.base) and the file table has dir numbers updated
>> accordingly. (obviously, the length and offset of the corresponding
>> sections are different)
>>
>> Is there any GDB internal command I could use to understand the problem?
>>
>> Thanks,
>>
>> Christophe.
>>
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: GDB cannot find line info
@ 2009-09-21  7:45 Robert Bu
  2009-09-21 15:00 ` Christophe LYON
  0 siblings, 1 reply; 9+ messages in thread
From: Robert Bu @ 2009-09-21  7:45 UTC (permalink / raw)
  To: christophe.lyon; +Cc: gdb

Hi Christophe,

Maybe you can try the CVS head or the 7.0 preview. I've once met the
same problem. And the problem is gone in CVS. Actually the problem is
fixed by the newly added function "watch_main_source_file_lossage
(void)" in buildsym.c

Robert.

>
>
> Hello,
>
> I have found a bug in our compiler (Open64 for ST200), which I have
> fixed to make it correctly output the directory table related to
> debug_line info.
> But now, I have many regressions in the GDB testsuite (6.8), the first
> one being in break.exp: now the command "break break.c:103" returns
> 'No line 103 in file "break.c"'
>
> I have dumped the dwarf debug_line info with 'dwarfdump -l' and
> 'readelf -wl', but could not find anything suspect:
> - with dwarfdump, the only difference is in the directory path
> - with readelf, the directory tables contain one more entry (absolute
> path to gdb.base) and the file table has dir numbers updated
> accordingly. (obviously, the length and offset of the corresponding
> sections are different)
>
> Is there any GDB internal command I could use to understand the problem?
>
> Thanks,
>
> Christophe.
>


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-09-25 15:37 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-18 16:12 GDB cannot find line info Christophe LYON
2009-09-18 16:27 ` Frédéric RISS
2009-09-18 16:33   ` Frederic Riss
2009-09-19 16:40 ` Joel Brobecker
2009-09-21  7:45 Robert Bu
2009-09-21 15:00 ` Christophe LYON
2009-09-21 15:35   ` Christophe LYON
2009-09-22 16:04     ` Christophe LYON
2009-09-25 15:37       ` Christophe LYON

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox