forked from OSchip/llvm-project
Reland D61689 Change -gz and -Wa,--compress-debug-sections to use gABI compression (SHF_COMPRESSED) with integrated assembler
This fixes an inconsistency: clang -c -gz -fno-integrated-as means SHF_COMPRESSED while clang -c -gz -fintegrated-as means zlib-gnu. --- Since July 15, 2015 (binutils-gdb commit 19a7fe52ae3d0971e67a134bcb1648899e21ae1c, included in 2.26), gas --compress-debug-sections=zlib (gcc -gz) means zlib-gabi: SHF_COMPRESSED. Before that GCC/binutils used zlib-gnu (.zdebug). clang's -gz was introduced in rC306115 (Jun 2017) to indicate zlib-gnu. It is 2020 now and it is not unreasonable to assume users of the new feature to have new linkers (ld.bfd/gold >= 2.26, lld >= rLLD273661). Change clang's default accordingly to improve standard conformance. zlib-gnu becomes out of fashion and gets poorer toolchain support. Its mangled names confuse tools and are more likely to cause problems. Reviewed By: compnerd Differential Revision: https://reviews.llvm.org/D61689
This commit is contained in:
parent
089adc339e
commit
7cf4603fae
|
@ -100,7 +100,10 @@ future versions of Clang.
|
|||
Modified Compiler Flags
|
||||
-----------------------
|
||||
|
||||
- ...
|
||||
- On ELF, ``-gz`` now defaults to ``-gz=zlib`` with the integrated assembler.
|
||||
It produces ``SHF_COMPRESSED`` style compression of debug information. GNU
|
||||
binutils 2.26 or newer, or lld is required to link produced object files. Use
|
||||
``-gz=zlib-gnu`` to get the old behavior.
|
||||
|
||||
New Pragmas in Clang
|
||||
--------------------
|
||||
|
|
|
@ -1155,8 +1155,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||
if (const Arg *A = Args.getLastArg(OPT_compress_debug_sections,
|
||||
OPT_compress_debug_sections_EQ)) {
|
||||
if (A->getOption().getID() == OPT_compress_debug_sections) {
|
||||
// TODO: be more clever about the compression type auto-detection
|
||||
Opts.setCompressDebugSections(llvm::DebugCompressionType::GNU);
|
||||
Opts.setCompressDebugSections(llvm::DebugCompressionType::Z);
|
||||
} else {
|
||||
auto DCT = llvm::StringSwitch<llvm::DebugCompressionType>(A->getValue())
|
||||
.Case("none", llvm::DebugCompressionType::None)
|
||||
|
|
|
@ -224,8 +224,7 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
|||
if (const Arg *A = Args.getLastArg(OPT_compress_debug_sections,
|
||||
OPT_compress_debug_sections_EQ)) {
|
||||
if (A->getOption().getID() == OPT_compress_debug_sections) {
|
||||
// TODO: be more clever about the compression type auto-detection
|
||||
Opts.CompressDebugSections = llvm::DebugCompressionType::GNU;
|
||||
Opts.CompressDebugSections = llvm::DebugCompressionType::Z;
|
||||
} else {
|
||||
Opts.CompressDebugSections =
|
||||
llvm::StringSwitch<llvm::DebugCompressionType>(A->getValue())
|
||||
|
|
Loading…
Reference in New Issue