[PATCH] D36313: [llvm-dwarfdump] - Print section name and index when dumping .debug_info ranges
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 8 08:15:56 PDT 2017
(I'll leave this for a bit to let Adrian and others chime in, hopefully)
On Tue, Aug 8, 2017 at 1:40 AM George Rimar <grimar at accesssoftek.com> wrote:
> >Too much/slow? I'd be surprised if it was very expensive to do a single
> loop over the sections (~hundreds of sections in an object file? Fewer in a
> linked executable), >maybe lazily (when the first range is rendered) - it'd
> only happen once for the whole dump run (& add a lookup in the resulting
> map for each range entry dumping - >which, yeah, that's something, but
> still). dwarfdump's an interactive/user-focussed tool, it probably takes
> longer to print things to the terminal than most of this >computation. (&
> longer still for the user to read it, etc)
>
>
> May be. What I was mean by "too much" is that I have feeling that scaning
> over all sections
>
> anyways should be not neccessary for printing nice output here. I don't
> see the reasons for additional code compliction.
>
The reason is to make the output simpler/easier to read - omitting
information that's not adding value where possible. It's certainly the
benefit isn't worth the extra complexity, but I imagine it's not too bad.
> There are probably 2 possible cases:
>
> Print ".section.name [index]" or "[index] .section.name". For latter case
> we do not need to scan over all sections to
>
> columnize the "[index]" as we can just use total amount of sections to
> calculate padding. So why not to use this form ?
>
I think that form's probably OK for the cases where the index is helpful
(though does feel a bit convoluted/awkward, putting the index before the
name)
>
> >>I would not omit something dependent on third conditions too, because it
> makes logic of output unclear forpeople that are not familar with tool.
> ("Why it prints >>section index for "foo" and does not for "bar" ? BUUUG !")
> >
> >Not sure it'd be particulary bug-like if the section numbers were only
> shown when the section names were ambiguous. Given two examples it would
> seem fairly >clear to me, I think, that the numbers were added to
> disambiguate two sections with the same name.
>
> If somebody going to parse tool's output then it is easier to have
> consistent format.
>
This info's probably not ideal for tool consumption anyway - the ranges are
multi-line output, embedded within the DWARF DIE dumping, etc. & we have
nice APIs to use instead :)
> Also (I'll show below) it can be not convinent or impossible to search for
> a section by name in a section table,
> so if we are going to print section index at least in some cases, I think
> it worth then to print it in all cases.
>
Sure - that's why I was suggesting that the indexes be omitted only when
the section name is unambiguous (hence the need to walk all the sections
up-front to count how many times each name appears).
>
> >>Also I think often I am looking for section number in
> readelf/objdump/other tools,
> >
> >Really? That surprises me - why are the section numbers of interest to
> you? For myself I'm usually interested in the section name.
>
> Ah, section name is often a final point of interest for sure, but numbers
> are very important to have. See:
>
> When I do readelf -a for some file and look at symbol table, I see section
> index "1" for "main",
> using it's index then I can look into section table.
> Symbol table '.symtab' contains 16 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
> 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS main.c
> ....
> 13: 0000000000000000 21 FUNC GLOBAL DEFAULT 1 main
>
> But if we would have only name here, like:
> 13: 0000000000000000 21 FUNC GLOBAL DEFAULT ".text.foobar" main
>
> It would be harder or impossible to find it by name in section table.
> For example, below is output of following:
> ar -x libclangAnalysis.a
> readelf -a ReachableCode.cpp.o
>
> Section Headers:
> [Nr] Name Type Address Offset
> Size EntSize Flags Link Info Align
> [ 0] NULL 0000000000000000 00000000
> 0000000000000000 0000000000000000 0 0 0
> [ 1] .strtab STRTAB 0000000000000000 003e8080
> 00000000000094e9 0000000000000000 0 0 1
> [ 2] .text PROGBITS 0000000000000000 00000040
> 0000000000002c96 0000000000000000 AX 0 0 16
> [ 3] .rela.text RELA 0000000000000000 002a7818
> 0000000000001c38 0000000000000018 1486 2 8
> [ 4] .group GROUP 0000000000000000 0029ede0
> 0000000000000008 0000000000000004 1486 1136 4
> [ 5] .text PROGBITS 0000000000000000 00002ce0
> 0000000000000011 0000000000000000 AXG 0 0 16
> [ 6] .group GROUP 0000000000000000 0029ede8
> 000000000000000c 0000000000000004 1486 968 4
> [ 7] .text PROGBITS 0000000000000000 00002d00
> 00000000000000a7 0000000000000000 AXG 0 0 16
> <~1500 the same sections here skpped.>
> .....
>
> As you can see section name can be not enough.
>
>
> >I'd skip printing it entirely if it's empty. 'Section: ""' doesn't seem
> helpful.
> >
> >I think printing it on the same line without the "Section: " prefix, as
> it was in your first version, is probably better when it is per-line.
> >
> >I guess maybe you're optimizing this for the case where some set of
> ranges share the same section (so it prints a "Section: "x"" header and
> then all the ranges in >that section? (or all the ranges in that section
> that are contiguous until another section change?)? Though I don't see a
> test case for that (multiple sections, some >ranges next to each other in
> the same section).
> >
>
> You earlier wrote: "& what about omitting the name or putting it
> somewhere else (like at the start on a separate line) if every entry is in
> the same section? (which will be the case for all ranges except the
> compile_unit ranges, most likely)", so that is what I tried to implement.
>
> >But I don't think that's a scenario we realy need to optimize for - it's
> going to be pretty rare that a list contains both multiple sections and
> distinct ranges in the >same section. (function/scope ranges will contain
> ranegs all from the same section and CU ranges will /mostly/ contain all
> ranges from distinct sections - except in >cases of nodebug functions
> putting holes in the range)
>
> George.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170808/31ded36d/attachment-0001.html>
More information about the llvm-commits
mailing list