Index: lld/ELF/OutputSections.cpp =================================================================== --- lld/ELF/OutputSections.cpp +++ lld/ELF/OutputSections.cpp @@ -272,7 +272,8 @@ // Write section contents to a temporary buffer and compress it. std::vector buf(size); writeTo(buf.data()); - if (Error e = zlib::compress(toStringRef(buf), compressedData)) + if (Error e = zlib::compress(toStringRef(buf), compressedData, + config->optimize >= 2 ? 6 : 1)) fatal("compress failed: " + llvm::toString(std::move(e))); // Update section headers. Index: lld/test/ELF/compressed-debug-level.test =================================================================== --- /dev/null +++ lld/test/ELF/compressed-debug-level.test @@ -0,0 +1,36 @@ +# 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: 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: 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'