[LLVMdev] RFC: Using zlib to decompress debug info sections.
Eric Christopher
echristo at gmail.com
Tue Apr 16 11:48:26 PDT 2013
On Tue, Apr 16, 2013 at 9:37 AM, Alexey Samsonov <samsonov at google.com> wrote:
>
> On Tue, Apr 16, 2013 at 8:31 PM, Michael Spencer <bigcheesegs at gmail.com>
> wrote:
>>
>> On Tue, Apr 16, 2013 at 2:37 AM, Alexey Samsonov <samsonov at google.com>
>> wrote:
>>>
>>> Hi!
>>>
>>> TL;DR WDYT of adding zlib decompression capabilities to LLVMObject
>>> library?
>>>
>>>
>>> ld.gold from GNU binutils has --compress-debug-sections=zlib option,
>>> which uses zlib to compress .debug_xxx sections and renames them to
>>> .zdebug_xxx.
>>> binutils (and GDB) support this properly, while LLVM command line tools
>>> don't:
>>>
>>> $ ld --version
>>> GNU gold (GNU Binutils for Ubuntu 2.22) 1.11
>>> $ ./bin/clang++ -g a.cc -Wl,--compress-debug-sections=zlib
>>> $ objdump -h a.out | grep debug
>>> 26 .debug_info 00000066 0000000000000000 0000000000000000 00002010
>>> 2**0
>>> 27 .debug_abbrev 00000048 0000000000000000 0000000000000000 00002068
>>> 2**0
>>> 28 .debug_aranges 00000000 0000000000000000 0000000000000000 000020bb
>>> 2**0
>>> 29 .debug_macinfo 00000000 0000000000000000 0000000000000000 000020cf
>>> 2**0
>>> 30 .debug_line 00000053 0000000000000000 0000000000000000 000020e3
>>> 2**0
>>> 31 .debug_loc 00000000 0000000000000000 0000000000000000 0000213e
>>> 2**0
>>> 32 .debug_pubtypes 00000000 0000000000000000 0000000000000000
>>> 00002152 2**0
>>> 33 .debug_str 00000069 0000000000000000 0000000000000000 00002166
>>> 2**0
>>> 34 .debug_ranges 00000000 0000000000000000 0000000000000000 000021d9
>>> 2**0
>>> $ ./bin/llvm-objdump -h a.out | grep debug
>>> 27 .zdebug_info 00000058 0000000000000000
>>> 28 .zdebug_abbrev 00000053 0000000000000000
>>> 29 .zdebug_aranges 00000014 0000000000000000
>>> 30 .zdebug_macinfo 00000014 0000000000000000
>>> 31 .zdebug_line 0000005b 0000000000000000
>>> 32 .zdebug_loc 00000014 0000000000000000
>>> 33 .zdebug_pubtypes 00000014 0000000000000000
>>> 34 .zdebug_str 00000073 0000000000000000
>>> 35 .zdebug_ranges 00000014 0000000000000000
>>>
>>> Decompression and proper handling of debug info sections may be needed
>>> in llvm-dwarfdump and llvm-symbolizer tools. We can implement this by:
>>> 1) Checking if zlib is present in the system during configuration.
>>> 2) Adding zlib decompression to llvm::MemoryBuffer, and section
>>> decompression to LLVMObject (this would require optional linking with -lz).
>>> 3) Using the methods in LLVM tools where needed.
>>>
>>> Does this make sense to you?
>>>
>>> --
>>> Alexey Samsonov, MSK
>>
>>
>> I'm not sure MemoryBuffer is the right place to do this either. I'm also
>> not sure if we want debug info decompression to be transparent in LLVMObject
>> or not. I'm leaning towards no since it's not part of the standard yet,
>
>
> Yeah, I also think that decompression should be explicitly requested by the
> user of LLVMObject.
>
>>
>> unless gold is actually using the SHF_COMPRESSED flag.
>>
>>
>> I think it should be part of Object, but as an external API that is used
>> when you find a section you know from external factors (the name matches
>> some list) is compressed.
>>
Definitely want the feature :)
I don't see SHF_COMPRESSED (unless readelf just isn't showing it to
me), but it wouldn't be too hard to get binutils to mark them as such.
Right now the convention is .z<foo> are compressed, but that's not as
precise as we'd like it to be. There's been some talk on the binutils
list about it, but it hasn't been implemented yet.
-eric
More information about the llvm-dev
mailing list