blob: b40e9b10b25ae9a875348ba6dcbab8ffc4d5705e [file] [log] [blame] [edit]
From 0e1e36098005b34ef7df3ca16310ae396483464a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
Date: Tue, 11 May 2021 09:19:52 +0300
Subject: [PATCH] [llvm-nm] Support the -V option, print that the tool is
compatible with GNU nm
This unlocks some codepaths in libtool.
---
llvm/test/tools/llvm-nm/libtool-version.test | 5 +++++
llvm/tools/llvm-nm/llvm-nm.cpp | 13 +++++++++++++
2 files changed, 18 insertions(+)
create mode 100644 llvm/test/tools/llvm-nm/libtool-version.test
diff --git llvm/test/tools/llvm-nm/libtool-version.test llvm/test/tools/llvm-nm/libtool-version.test
new file mode 100644
index 0000000000000..8d32634fed615
--- /dev/null
+++ llvm/test/tools/llvm-nm/libtool-version.test
@@ -0,0 +1,5 @@
+RUN: llvm-nm -V | FileCheck %s
+RUN: llvm-nm --version | FileCheck %s
+Check that the output of llvm-nm -V (and --version) contains the text
+"GNU" somewhere, to let libtool know that it is compatible with GNU nm.
+CHECK: GNU
diff --git llvm/tools/llvm-nm/llvm-nm.cpp llvm/tools/llvm-nm/llvm-nm.cpp
index 914b0a14bfedc..93ed3273c4a4e 100644
--- llvm/tools/llvm-nm/llvm-nm.cpp
+++ llvm/tools/llvm-nm/llvm-nm.cpp
@@ -224,6 +224,8 @@ cl::opt<bool> AddInlinedInfo("add-inlinedinfo",
"TBD(Mach-O) only"),
cl::cat(NMCat));
+cl::opt<bool> Version("V", cl::desc("Print version info"), cl::cat(NMCat));
+
cl::extrahelp HelpResponse("\nPass @FILE as argument to read options from FILE.\n");
bool PrintAddress = true;
@@ -2230,11 +2232,22 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
}
}
+static void printExtraVersionInfo(raw_ostream &outs) {
+ outs << "llvm-nm, compatible with GNU nm\n";
+}
+
int main(int argc, char **argv) {
InitLLVM X(argc, argv);
cl::HideUnrelatedOptions(NMCat);
+ cl::AddExtraVersionPrinter(printExtraVersionInfo);
cl::ParseCommandLineOptions(argc, argv, "llvm symbol table dumper\n");
+ if (Version) {
+ printExtraVersionInfo(outs());
+ cl::PrintVersionMessage();
+ return 0;
+ }
+
// llvm-nm only reads binary files.
if (error(sys::ChangeStdinToBinary()))
return 1;