[Dwarf-discuss] multiple entries for one line of code in .debug_line ?

Jun Koi junkoi2004
Sun Oct 8 00:24:47 GMT 2006


On 10/8/06, Jun Koi <junkoi2004 at gmail.com> wrote:
> Hi Sebastian,
>
> On 10/7/06, Sebastian Krawczuk <syk at ocsystems.com> wrote:
> > Jun,
> >
> > All is fine.  Anything that your compiler emitted in rage 0xc01526c4
> > and  0xc01526ea  is in reference to your 'return' statement at line
> > 369.  Maybe the compiler broken it into atomic operations and had to
> > produce such source line table.  I don't know.  I would not worry too
> > much and just aggregate data from such entries and interpret is as one
> > line entry and range 0xc01526c4-0xc01526ea.
> >

OK, but I think again on this matter: as I understand, each line of
code should have a range of address, which indicate the start and end
address of the code, right?

But as I observed, some lines of code has only one entry, which can be
interpreted as start address. So in these cases, we dont have the end
address of that line of code???

Thank you,
Jun


> >
> > PS.  It looks like we do your homework here ;)
>
> It .. is ... not! Because I am not a student!
>
> This is my personal project, for hobby only :-)
>
> Best,
> Jun
>
> > > Hello,
> > >
> > > I used dwarfdump to get information on source codes, and saw something
> > > strange: one line of code may make up to 4 entries in debug_line?
> > >
> > > For example, please see the below code (from Linux kernel):
> > >
> > >
> > > asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf,
> > > size_t count)
> > > {
> > >     struct file *file;
> > >     ssize_t ret = -EBADF;
> > >     int fput_needed;
> > >
> > >     file = fget_light(fd, &fput_needed);
> > >     if (file) {
> > >         loff_t pos = file_pos_read(file);
> > >         ret = vfs_write(file, buf, count, &pos);       <==== ? (line 369)
> > >         file_pos_write(file, pos);
> > >         fput_light(file, fput_needed);
> > >     }
> > >
> > >     return ret;
> > > }
> > >
> > >
> > >
> > > The line "ret = vfs_write(...)" at line 369 got 4 entries like below
> > > (vfs_write() is a normal function, not a macro):
> > >
> > >
> > > /home/jun/projects/linux-2.6.16.29/fs/read_write.c:       [369,-1]
> > >    0xc01526c4      // new statement
> > > /home/jun/projects/0928/linux-2.6.16.29/fs/read_write.c:
> > > [369,-1]        0xc01526ca      // new statement
> > > /home/jun/projects/0928/linux-2.6.16.29/fs/read_write.c:
> > > [369,-1]        0xc01526d0      // new statement
> > > /home/jun/projects/0928/linux-2.6.16.29/fs/read_write.c:
> > > [369,-1]        0xc01526ea      // new statement
> > >
> > >
> > > Is there any reason of that? As I observed, normally a line of code
> > > has only 1 debug_line entry.
> > >
> > >
> > > Many thanks.
> > > Jun
> > >
> > > _______________________________________________
> > > Dwarf-discuss mailing list
> > > Dwarf-discuss at lists.freestandards.org
> > > http://lists.freestandards.org/mailman/listinfo/dwarf-discuss
> > >
> >
> >
>





More information about the Dwarf-discuss mailing list