[lld] b7d36a1 - [ELF] Use compression::getReasonIfUnsupported for zlib/zstd unavailable error
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 6 10:31:49 PDT 2023
Author: Fangrui Song
Date: 2023-07-06T10:31:45-07:00
New Revision: b7d36a1a1e0ebf995381e36464abf52e95b76779
URL: https://github.com/llvm/llvm-project/commit/b7d36a1a1e0ebf995381e36464abf52e95b76779
DIFF: https://github.com/llvm/llvm-project/commit/b7d36a1a1e0ebf995381e36464abf52e95b76779.diff
LOG: [ELF] Use compression::getReasonIfUnsupported for zlib/zstd unavailable error
The error message now matches llvm-objcopy --compress-debug-sections=[zlib|zstd].
Added:
lld/test/ELF/compress-sections-err.s
Modified:
lld/ELF/Driver.cpp
Removed:
################################################################################
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index e8369043abeed6..1252e343cd42e4 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -1013,21 +1013,19 @@ template <class ELFT> static void readCallGraphsFromObjectFiles() {
}
}
-static DebugCompressionType getCompressDebugSections(opt::InputArgList &args) {
- StringRef s = args.getLastArgValue(OPT_compress_debug_sections, "none");
- if (s == "zlib") {
- if (!compression::zlib::isAvailable())
- error("--compress-debug-sections: zlib is not available");
- return DebugCompressionType::Zlib;
- }
- if (s == "zstd") {
- if (!compression::zstd::isAvailable())
- error("--compress-debug-sections: zstd is not available");
- return DebugCompressionType::Zstd;
+static DebugCompressionType getCompressionType(StringRef s, StringRef option) {
+ DebugCompressionType type = StringSwitch<DebugCompressionType>(s)
+ .Case("zlib", DebugCompressionType::Zlib)
+ .Case("zstd", DebugCompressionType::Zstd)
+ .Default(DebugCompressionType::None);
+ if (type == DebugCompressionType::None) {
+ if (s != "none")
+ error("unknown " + option + " value: " + s);
+ } else if (const char *reason = compression::getReasonIfUnsupported(
+ compression::formatFor(type))) {
+ error(option + ": " + reason);
}
- if (s != "none")
- error("unknown --compress-debug-sections value: " + s);
- return DebugCompressionType::None;
+ return type;
}
static StringRef getAliasSpelling(opt::Arg *arg) {
@@ -1148,7 +1146,9 @@ static void readConfigs(opt::InputArgList &args) {
config->checkSections =
args.hasFlag(OPT_check_sections, OPT_no_check_sections, true);
config->chroot = args.getLastArgValue(OPT_chroot);
- config->compressDebugSections = getCompressDebugSections(args);
+ config->compressDebugSections = getCompressionType(
+ args.getLastArgValue(OPT_compress_debug_sections, "none"),
+ "--compress-debug-sections");
config->cref = args.hasArg(OPT_cref);
config->optimizeBBJumps =
args.hasFlag(OPT_optimize_bb_jumps, OPT_no_optimize_bb_jumps, false);
diff --git a/lld/test/ELF/compress-sections-err.s b/lld/test/ELF/compress-sections-err.s
new file mode 100644
index 00000000000000..09780380708319
--- /dev/null
+++ b/lld/test/ELF/compress-sections-err.s
@@ -0,0 +1,12 @@
+# REQUIRES: x86
+# UNSUPPORTED: zlib
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
+# RUN: ld.lld %t.o --compress-debug-sections=zlib --compress-debug-sections=none -o /dev/null 2>&1 | count 0
+# RUN: not ld.lld %t.o --compress-debug-sections=zlib -o /dev/null 2>&1 | \
+# RUN: FileCheck %s --implicit-check-not=error:
+
+# CHECK: error: --compress-debug-sections: LLVM was not built with LLVM_ENABLE_ZLIB or did not find zlib at build time
+
+.globl _start
+_start:
More information about the llvm-commits
mailing list