[PATCH] libdw: Add dwarf_next_lines to read .debug_line tables without CUs.

Mark Wielaard mark@klomp.org
Fri Jun 29 08:26:00 GMT 2018


On Mon, 2018-06-25 at 15:12 +0200, Mark Wielaard wrote:
> It is sometimes useful to read .debug_line tables on their own without
> having an associated CU DIE. DWARF5 line tables are self-contained.
> 
> Adjust dwarf_begin_elf to accept ELF files with just a .debug_line.
> 
> Add a new function dwarf_next_lines that returns the Dwarf_Files and
> Dwarf_Lines while iterating over just the .debug_lines section. Since
> we parse and cache the information it also will try to match the CU
> a table is associated with. This is only necessary for DWARF4 line
> tables (we will need at least the compilation dir from the CU) and
> won't be done for DWARF5 line tables. It also isn't an error if there
> is no associated CU (but will mean for DWARF4 line tables the dir list
> and the file paths might not be complete).
> 
> A typical way to call this new function is:
> 
>   Dwarf_Off off, next_off = 0;
>   Dwarf_CU *cu = NULL;
>   Dwarf_Files *files;
>   size_t nfiles;
>   Dwarf_Lines *lines;
>   size_t nlines;
>   int res;
>   while ((res = dwarf_next_lines (dbg, off = next_off, &next_off, &cu,
>                                   &files, &nfiles, &lines, &nlines)) == 0)
>     {
>       /* ... handle files and lines ... */
>     }
> 
>   if (res < 0)
>     printf ("BAD dwarf_next_lines: %s\n", dwarf_errmsg (-1));
> 
> See libdw.h for the full documentation. For more examples on how to use
> the function see the new testcases next-files and next-lines.
> 
> Also adjust the file paths for line tables missing a comp_dir.
> They are no longer made "absolute" by prepending a slash '/' in front
> of them. This really was not useful and didn't happen in any of the
> testcases. They are now just kept relative.
> 
> Make eu-readelf --debug-dump=decodedline use dwarf_next_lines instead
> of iterating over the CUs to show the (decoded) line tables. This allows
> it to show decoded line tables even if there is no .debug_info section.
> 
> New tests have been added that mimic the get-files and get-lines tests
> but use dwarf_next_lines instead of iterating over all CUs. They produce
> identical output (modulo the CU information). Also add a new test file
> that contains only a .debug_line section.

Initial testing seems to indicate that it works as expected.
Pushed to git master.

Cheers,

Mark



More information about the Elfutils-devel mailing list