[PATCH] D20211: [ELF] - Support of compressed debug sections creation(draft).
H.J. Lu via llvm-commits
llvm-commits at lists.llvm.org
Fri May 13 05:29:02 PDT 2016
On Fri, May 13, 2016 at 4:35 AM, George Rimar via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> grimar added inline comments.
>
> ================
> Comment at: ELF/OutputSections.cpp:842
> @@ +841,3 @@
> + // renamed to start with.zdebug to identify the use of compression.
> + StringSaver Saver(ScriptConfig->Alloc);
> + this->Name = Saver.save(Twine(".z") + Name.drop_front(1));
> ----------------
> ruiu wrote:
>> Please don't use an unrelated object's members.
> Yep, I know, that is just because it was a draft patch.
> I was thinking about it when did that. What is the good way ?
> Actually I do not like how it is done now: we have lots of StringSaver instances in many places in lld.
> Are there reasons for that instead of having one StringSaver for all with single Alloc and just global reference to it ?
>
> ================
> Comment at: ELF/OutputSections.cpp:869-874
> @@ +868,8 @@
> +
> + // If not successfully compressed or total size is greater than
> + // size before applying compression, then cancel compressed output.
> + size_t TotalSize = Compressed.size() + getCompressionHeaderSize<ELFT>();
> + Compress = Success == zlib::Status::StatusOK && TotalSize < getSize();
> + if (!Compress)
> + return;
> +
> ----------------
> ruiu wrote:
>> I think we don't have to care about this edge case. Unless you are compressing random bits, it usually shrink.
> I would leave it as is. That is mentioned in docs: "The .debug_line and .debug_pubnames sections would be larger compressed than in their original uncompressed form, and have therefore been left uncompressed." (https://docs.oracle.com/cd/E53394_01/html/E54813/section_compression.html#scrolltoc) and done both by gold/bfd and very transparent in implementation.
> In addition I think that if feature is used then motivation and expected result is to consume less space, I do not think it is acceptable to consume more than without it, it is confusing and opposite to its description.
>
> ================
> Comment at: ELF/OutputSections.cpp:1014-1025
> @@ +1013,14 @@
> + const endianness E = ELFT::TargetEndianness;
> + if (Config->CompressDebugSections == "zlib-gnu") {
> + // 4 bytes magic + size of uncompressed data in big endian.
> + memcpy(Buf, "ZLIB", 4);
> + write64be(Buf + 4, UncompressedSize);
> + } else {
> + // "zlib-gabi" or "zlib".
> + write32<E>(Buf, ELFCOMPRESS_ZLIB);
> + if (ELFT::Is64Bits)
> + write64<E>(Buf + 2 * sizeof(Elf64_Word), UncompressedSize);
> + else
> + write32<E>(Buf + sizeof(Elf32_Word), UncompressedSize);
> + }
> +
> ----------------
> ruiu wrote:
>> Why we have two types of headers? If one is obsolete, we probably don't want to implement it.
> There are 2 different approaches used (https://docs.oracle.com/cd/E53394_01/html/E54813/section_compression.html):
> 1) gnu-style renames sections to ".z*[NAME]" and do not uses SHF_COMPRESSED.
> 2) zlib style. Sections have SHF_COMPRESSED flag and are not renamed.
>
> "Unless there is a specific requirement to use the zlib-gnu style, the more general default zlib style is recommended." says https://docs.oracle.com/cd/E53394_01/html/E54813/man-cds.html, but it is not mentioned if that depricated or something.
> Not supporting of zlib-gnu style would make implementation a bit cleaner.
>
> It is not hard to support both though.
>
Support both for input is nice. I don't think ldd needs to support
zlib-gnu for output, which has been deprecated in ld and gold.
--
H.J.
More information about the llvm-commits
mailing list