[PATCH] D70658: [LLD][ELF] - Make compression level be dependent on -On.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 26 00:52:46 PST 2019
This revision was automatically updated to reflect the committed changes.
grimar marked 3 inline comments as done.
Closed by commit rG19edd675c632: [LLD][ELF] - Make compression level be dependent on -On. (authored by grimar).
Changed prior to commit:
https://reviews.llvm.org/D70658?vs=230848&id=231013#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70658/new/
https://reviews.llvm.org/D70658
Files:
lld/ELF/OutputSections.cpp
lld/test/ELF/compressed-debug-level.test
Index: lld/test/ELF/compressed-debug-level.test
===================================================================
--- /dev/null
+++ lld/test/ELF/compressed-debug-level.test
@@ -0,0 +1,38 @@
+# REQUIRES: x86, zlib
+
+# RUN: yaml2obj %s -o %t.o
+
+# RUN: ld.lld %t.o -o %t.default --compress-debug-sections=zlib
+# RUN: llvm-readelf --sections %t.default | FileCheck -check-prefixes=HEADER,LEVEL1 %s
+
+# RUN: ld.lld -O0 %t.o -o %t.O0 --compress-debug-sections=zlib
+# RUN: llvm-readelf --sections %t.O0 | FileCheck -check-prefixes=HEADER,LEVEL1 %s
+# RUN: cmp %t.default %t.O0
+
+# RUN: ld.lld -O1 %t.o -o %t.O1 --compress-debug-sections=zlib
+# RUN: llvm-readelf --sections %t.O1 | FileCheck -check-prefixes=HEADER,LEVEL1 %s
+# RUN: cmp %t.default %t.O1
+
+# RUN: ld.lld -O2 %t.o -o %t.O2 --compress-debug-sections=zlib
+# RUN: llvm-readelf --sections %t.O2 | FileCheck -check-prefixes=HEADER,LEVEL6 %s
+
+## LLD uses zlib compression of level 1 when -O0, -O1 and level 6 when -O2.
+## Here we check how -O flag affects the size of compressed sections produced.
+
+# HEADER: [Nr] Name Type Address Off Size
+# LEVEL1: [ 1] .debug_info PROGBITS 00000000 000094 00001c
+# LEVEL6: [ 1] .debug_info PROGBITS 00000000 000094 00001b
+
+## A little arbitrary debug section which has a different size after
+## applying compression of level 1 and 6.
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_386
+Sections:
+ - Name: .debug_info
+ Type: SHT_PROGBITS
+ Content: '01010201020201020102'
Index: lld/ELF/OutputSections.cpp
===================================================================
--- lld/ELF/OutputSections.cpp
+++ lld/ELF/OutputSections.cpp
@@ -272,7 +272,12 @@
// Write section contents to a temporary buffer and compress it.
std::vector<uint8_t> buf(size);
writeTo<ELFT>(buf.data());
- if (Error e = zlib::compress(toStringRef(buf), compressedData))
+ // We chose 1 as the default compression level because it is the fastest. If
+ // -O2 is given, we use level 6 to compress debug info more by ~15%. We found
+ // that level 7 to 9 doesn't make much difference (~1% more compression) while
+ // they take significant amount of time (~2x), so level 6 seems enough.
+ if (Error e = zlib::compress(toStringRef(buf), compressedData,
+ config->optimize >= 2 ? 6 : 1))
fatal("compress failed: " + llvm::toString(std::move(e)));
// Update section headers.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70658.231013.patch
Type: text/x-patch
Size: 2499 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191126/94569a1c/attachment.bin>
More information about the llvm-commits
mailing list