[cc1as] Support --compress-debug-sections=zstd
authorFangrui Song <i@maskray.me>
Thu, 8 Sep 2022 23:31:45 +0000 (16:31 -0700)
committerFangrui Song <i@maskray.me>
Thu, 8 Sep 2022 23:31:45 +0000 (16:31 -0700)
`clang -gz=zstd -c a.s` generates ELFCOMPRESS_ZSTD compressed debug info
sections if compression decreases size.

clang/test/Misc/cc1as-compress.s
clang/tools/driver/cc1as_main.cpp

index 8937e5d..54563c3 100644 (file)
@@ -3,4 +3,13 @@
 
 // RUN: %clang -cc1as -triple i686 --compress-debug-sections %s -o /dev/null
 // RUN: %clang -cc1as -triple i686 -compress-debug-sections=zlib %s -o /dev/null
-// RUN: %if zstd %{ %clang -cc1as -triple x86_64 -compress-debug-sections=zstd %s -o /dev/null %}
+
+// RUN: %if zstd %{ %clang -cc1as -triple x86_64 -filetype obj -compress-debug-sections=zstd %s -o %t %}
+// RUN: %if zstd %{ llvm-readelf -S -x .debug_str %t | FileCheck %s --check-prefix=ZSTD %}
+
+// ZSTD: .debug_str    PROGBITS [[#%x,]] [[#%x,]] [[#%x,]] 01 MSC 0 0  8
+// ZSTD: Hex dump of section '.debug_str':
+// ZSTD: 0000 02000000 00000000
+
+.section        .debug_str,"MS",@progbits,1
+.asciz  "perfectly compressable data sample *****************************************"
index 4dcbc4f..f4ae351 100644 (file)
@@ -240,6 +240,7 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
         llvm::StringSwitch<llvm::DebugCompressionType>(A->getValue())
             .Case("none", llvm::DebugCompressionType::None)
             .Case("zlib", llvm::DebugCompressionType::Zlib)
+            .Case("zstd", llvm::DebugCompressionType::Zstd)
             .Default(llvm::DebugCompressionType::None);
   }