[PATCH] Remove wild .debug_aranges entries generated from unimportant labels

Richard Mitton richard at codersnotes.com
Wed Oct 2 18:05:43 PDT 2013

It seems though that common symbols get converted into just regular BSS 
data upon link? (they do on my system at least). Common symbols seem to 
get assigned a valid address and size, not zero. I agree that writing 
out zero entries would be stupid, but that doesn't seem to be what we're 

I think I'd rather see the same address listed under two CUs (if it 
indeed appears in both CUs), than not at all.

(side note: IMHO llvm shouldn't really even support common symbols, 
surely comdat would be a better way of doing the same thing? And then we 
could emit debug_info chunks as comdat too and the problem would resolve 
itself. Well I can dream...)

Richard Mitton
richard at codersnotes.com

On 10/02/2013 05:53 PM, Eric Christopher wrote:
> On Wed, Oct 2, 2013 at 4:21 PM, Richard Mitton 
> <richard at codersnotes.com <mailto:richard at codersnotes.com>> wrote:
>     I'd rather keep it in. I'm sure gcc might not emit the arange
>     table correctly, but the DWARF specs are quite clear that the idea
>     of an arange table is to map *every* byte in the program to it's
>     debug CU. Not just text. If there's a reference in the debug_info
>     to an address, the arange table should have the reverse of that.
>     This is why I used the label list to generate it, rather than
>     trying to pick out functions/variables/etc. The labels added to
>     debug_info define exactly the set of addresses required.
> Data in general is fine to keep in, however, ...
>     Common symbols have an address in the final program, so they
>     should be included too.
> This I'm going to disagree with, and the dwarf standard seems to back 
> me up here:
> The table consists of sets of variable length entries, each set 
> describing the portion of the program’s address space that is covered 
> by a single compilation unit.
> which says to me that the only items that should be included in the 
> aranges are items that are going to be unique to that compilation unit 
> - which would leave out common data. And a debugger can always use the 
> symbol table here anyhow. I don't know that we want a bunch of entries 
> in the aranges table that point to an address of 0 with a length of 1 
> - it doesn't strike me as useful or desirable.
>     Debuggers historically don't always use the full capabilities of
>     the DWARF data, because the compilers don't generate correct data.
>     If we fix the compiler here once and for all, it enables future
>     debuggers to make use of it.
> Heh. Except they won't, but I understand the point you're trying to 
> make. FWIW I'm attempting to get rid of pubnames and pubtypes as well.
>     The biggest challenge faced by debuggers today is compilers which
>     only emit barely enough DWARF to function. We can do better than that.
> Agreed, somewhat. The problem is that they have to work with what they 
> can depend upon.
> -eric
>>     Eric Christopher <mailto:echristo at gmail.com>
>>     Wednesday, October 02, 2013 2:35 PM
>>     *nod* The fix is fine.
>>     I think the additional complication that got us here is the adding of
>>     data symbols to aranges. Now, as far as I can tell, gcc doesn't emit
>>     aranges for any of them, however, the real problem for us are common
>>     symbols. I think we want to omit ranges for common symbols - it
>>     doesn't really seem to make sense anyhow.
>>     I know that gdb and the various gnu tools don't use that part of the
>>     information, but I don't know of any other users. So objections to
>>     removing that part? It'll definitely greatly simplify the code.
>>     -eric
>>     Richard Mitton <mailto:richard at codersnotes.com>
>>     Wednesday, October 02, 2013 2:00 PM
>>     LGTM, although I dunno if I'm actually authorized to approve
>>     patches :)
>>     There's code in there already that ignores labels in metadata
>>     sections, but it wasn't getting triggered because debug_loc
>>     labels are added after the test for it. And the stupid
>>     sectionless common symbols mean that it couldn't just ignore NULL
>>     sections either.
>>     This looks like a fine fix.
>>     Richard Mitton
>>     richard at codersnotes.com <mailto:richard at codersnotes.com>
>>     On 10/02/2013 01:33 PM, Alexey Samsonov wrote:
>>     _______________________________________________
>>     llvm-commits mailing list
>>     llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
>>     http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131002/7b8f97a6/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 1417b7a1a41d92ce_compose-unknown-contact.jpg
Type: image/jpeg
Size: 770 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131002/7b8f97a6/attachment.jpg>

More information about the llvm-commits mailing list