-gz=zlib compiler flag should enable compressed debug sections. It works as expected for object files, but does not pass the required flag to the linker to have them compressed in the final library/binary. Version: FreeBSD clang version 11.0.1 (git@github.com:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe) Object file has the 'C' flag: % cc -c -g -gz=zlib hello.c % readelf -S hello.o | grep -A1 ' .debug_info' [ 6] .debug_info PROGBITS 0000000000000000 000000c7 0000000000000055 0000000000000000 C 0 0 8 Linked binary does not have the 'C' flag: % cc -g -gz=zlib hello.c -o hello % readelf -S hello | grep -A1 ' .debug_info' [28] .debug_info PROGBITS 0000000000000000 00001520 0000000000000a91 0000000000000000 0 0 1 % Using gcc, the linked binary does have 'C' flag: % gcc10 -g -gz=zlib hello.c -o hello % readelf -S hello | grep -A1 ' .debug_info' [24] .debug_info PROGBITS 0000000000000000 0000150a 00000000000004de 0000000000000000 C 0 0 1 Using -v to see the command line, gcc is automatically adding `-compress-debug-sections=zlib` to the linker invocation.
It appears that clang 11 in the base system has this issue on Linux and FreeBSD. Testing upstream I see that the flag is passed to the linker for --target=x86_64-unknown-linux-gnu but not for --target=x86_64-unknown-freebsd. Compare upstream clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/FreeBSD.cpp freebsd::Linker::ConstructJob() needs to have added AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
Upstream commit, code review: https://reviews.llvm.org/rGccb4124a4172bf2cb2e1cd7c253f0f1654fce294 https://reviews.llvm.org/D87321
https://reviews.llvm.org/D97752
Now committed as https://reviews.llvm.org/rG462cf39a5c180621b56f7602270ce33eb7b68d23
A commit in branch stable/13 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=c4dbe899aa08f60b66426ecf63b1346bffe25ed8 commit c4dbe899aa08f60b66426ecf63b1346bffe25ed8 Author: Ed Maste <emaste@FreeBSD.org> AuthorDate: 2021-03-03 01:35:57 +0000 Commit: Ed Maste <emaste@FreeBSD.org> CommitDate: 2021-03-09 14:28:54 +0000 clang: Fix -gz=zlib options for linker Clang commit ccb4124a4172bf2cb2e1cd7c253f0f1654fce294: Fix -gz=zlib options for linker gcc translates -gz=zlib to --compress-debug-options=zlib for both assembler and linker but clang only does this for assembler. The linker needs --compress-debug-options=zlib option to compress the debug sections in the generated executable or shared library. Due to this bug, -gz=zlib has no effect on the generated executable or shared library. This patch fixes that. Clang commit 462cf39a5c180621b56f7602270ce33eb7b68d23: [Driver] Fix -gz=zlib options for linker also on FreeBSD ccb4124a4172 fixed translating -gz=zlib to --compress-debug-sections for linker invocation for several ToolChains, but omitted FreeBSD. PR: 253942 Approved by: dim Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D29028 (cherry picked from commit 19587d742264c5caec33d218e9cea6eb78f6c6bb) .../clang/lib/Driver/ToolChains/AMDGPU.cpp | 1 + .../clang/lib/Driver/ToolChains/CommonArgs.cpp | 18 ++++++++++++++++++ .../clang/lib/Driver/ToolChains/CommonArgs.h | 4 ++++ .../clang/lib/Driver/ToolChains/FreeBSD.cpp | 1 + .../llvm-project/clang/lib/Driver/ToolChains/Gnu.cpp | 1 + .../llvm-project/clang/lib/Driver/ToolChains/HIP.cpp | 2 ++ 6 files changed, 27 insertions(+)