diff options
author | Fangrui Song <i@maskray.me> | 2022-07-28 10:45:53 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2022-07-28 10:45:53 -0700 |
commit | c26dc2904b95b3685d883e760e84046ea6c33d7f (patch) | |
tree | f4c5a8e7f57d8ad4c7d68e0330b1e2126a5a2404 /llvm/tools/llvm-objcopy | |
parent | f5b21680d1221d7acaa1b174d0b86fa907c71eb8 (diff) | |
download | llvm-c26dc2904b95b3685d883e760e84046ea6c33d7f.zip llvm-c26dc2904b95b3685d883e760e84046ea6c33d7f.tar.gz llvm-c26dc2904b95b3685d883e760e84046ea6c33d7f.tar.bz2 |
[llvm-objcopy] Support --{,de}compress-debug-sections for zstd
Also, add ELFCOMPRESS_ZSTD (2) from the approved generic-abi proposal:
https://groups.google.com/g/generic-abi/c/satyPkuMisk
("Add new ch_type value: ELFCOMPRESS_ZSTD")
Link: https://discourse.llvm.org/t/rfc-zstandard-as-a-second-compression-method-to-llvm/63399
("[RFC] Zstandard as a second compression method to LLVM")
Differential Revision: https://reviews.llvm.org/D130458
Diffstat (limited to 'llvm/tools/llvm-objcopy')
-rw-r--r-- | llvm/tools/llvm-objcopy/ObjcopyOptions.cpp | 21 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/ObjcopyOpts.td | 2 |
2 files changed, 17 insertions, 6 deletions
diff --git a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp index 7db1e79..7d4e651 100644 --- a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp +++ b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp @@ -722,16 +722,27 @@ objcopy::parseObjcopyOptions(ArrayRef<const char *> RawArgsArr, if (const auto *A = InputArgs.getLastArg(OBJCOPY_compress_debug_sections)) { Config.CompressionType = StringSwitch<DebugCompressionType>(A->getValue()) .Case("zlib", DebugCompressionType::Z) + .Case("zstd", DebugCompressionType::Zstd) .Default(DebugCompressionType::None); - if (Config.CompressionType == DebugCompressionType::None) + switch (Config.CompressionType) { + case DebugCompressionType::None: return createStringError( errc::invalid_argument, "invalid or unsupported --compress-debug-sections format: %s", A->getValue()); - if (!compression::zlib::isAvailable()) - return createStringError( - errc::invalid_argument, - "LLVM was not compiled with LLVM_ENABLE_ZLIB: can not compress"); + case DebugCompressionType::Z: + if (!compression::zlib::isAvailable()) + return createStringError( + errc::invalid_argument, + "LLVM was not compiled with LLVM_ENABLE_ZLIB: cannot compress"); + break; + case DebugCompressionType::Zstd: + if (!compression::zstd::isAvailable()) + return createStringError( + errc::invalid_argument, + "LLVM was not compiled with LLVM_ENABLE_ZSTD: cannot compress"); + break; + } } Config.AddGnuDebugLink = InputArgs.getLastArgValue(OBJCOPY_add_gnu_debuglink); diff --git a/llvm/tools/llvm-objcopy/ObjcopyOpts.td b/llvm/tools/llvm-objcopy/ObjcopyOpts.td index d3713b5..0fddd44 100644 --- a/llvm/tools/llvm-objcopy/ObjcopyOpts.td +++ b/llvm/tools/llvm-objcopy/ObjcopyOpts.td @@ -33,7 +33,7 @@ def compress_debug_sections : Joined<["--"], "compress-debug-sections=">, MetaVarName<"format">, HelpText<"Compress DWARF debug sections using specified format. Supported " - "formats: zlib">; + "formats: zlib, zstd. Select zlib if <format> is omitted">; def : Flag<["--"], "compress-debug-sections">, Alias<compress_debug_sections>, AliasArgs<["zlib"]>; def decompress_debug_sections : Flag<["--"], "decompress-debug-sections">, |