aboutsummaryrefslogtreecommitdiff
path: root/llvm
diff options
context:
space:
mode:
authorAlexander Shaposhnikov <alexshap@fb.com>2021-02-11 13:46:49 -0800
committerAlexander Shaposhnikov <alexshap@fb.com>2021-02-16 17:52:12 -0800
commitcdcb60a820571f7384920fb534ce23e7568bfc03 (patch)
treee31f8b935204a90ee3b6802e59f33f15ea89fd2c /llvm
parentc62b737ad655f189cf76f4324ba04317133d6648 (diff)
downloadllvm-cdcb60a820571f7384920fb534ce23e7568bfc03.zip
llvm-cdcb60a820571f7384920fb534ce23e7568bfc03.tar.gz
llvm-cdcb60a820571f7384920fb534ce23e7568bfc03.tar.bz2
[llvm-libtool] Emit warnings for files without symbols
1. Emit warnings for files without symbols. 2. Add -no_warning_for_no_symbols. Test plan: make check-all Differential revision: https://reviews.llvm.org/D95843
Diffstat (limited to 'llvm')
-rw-r--r--llvm/docs/CommandGuide/llvm-libtool-darwin.rst4
-rw-r--r--llvm/test/tools/llvm-libtool-darwin/no-symbols-warning.test50
-rw-r--r--llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp8
3 files changed, 62 insertions, 0 deletions
diff --git a/llvm/docs/CommandGuide/llvm-libtool-darwin.rst b/llvm/docs/CommandGuide/llvm-libtool-darwin.rst
index 6be849a..ccdf464 100644
--- a/llvm/docs/CommandGuide/llvm-libtool-darwin.rst
+++ b/llvm/docs/CommandGuide/llvm-libtool-darwin.rst
@@ -64,6 +64,10 @@ OPTIONS
:option:`-L` and before the default search path. The default search path
includes directories `/lib`, `/usr/lib` and `/usr/local/lib`.
+.. option:: -no_warning_for_no_symbols
+
+ Do not warn about files that have no symbols.
+
.. option:: -o <filename>
Specify the output file name. Must be specified exactly once.
diff --git a/llvm/test/tools/llvm-libtool-darwin/no-symbols-warning.test b/llvm/test/tools/llvm-libtool-darwin/no-symbols-warning.test
new file mode 100644
index 0000000..4e53b25
--- /dev/null
+++ b/llvm/test/tools/llvm-libtool-darwin/no-symbols-warning.test
@@ -0,0 +1,50 @@
+## This test verifies that the tool emits a warning for object files
+## without symbols.
+
+# RUN: yaml2obj --docnum=1 %s -o %t-x86_64-empty.o
+# RUN: yaml2obj --docnum=2 %s -o %t-armv7-empty.o
+# RUN: echo 'target triple = "arm64-apple-ios8.0.0"' | llvm-as -o %t-empty.bc
+# RUN: yaml2obj %S/Inputs/input1.yaml -o %t-non-empty.o
+
+# RUN: llvm-libtool-darwin -static -o %t.lib %t-x86_64-empty.o 2>&1 | \
+# RUN: FileCheck --check-prefix=WARNING %s -DPREFIX=%basename_t.tmp
+
+# WARNING: warning: [[PREFIX]]-x86_64-empty.o has no symbols
+
+# RUN: llvm-libtool-darwin -no_warning_for_no_symbols -static -o %t.lib \
+# RUN: %t-x86_64-empty.o 2>&1 | \
+# RUN: FileCheck %s --allow-empty --implicit-check-not='warning:'
+
+# RUN: llvm-libtool-darwin -static -o %t.lib %t-non-empty.o 2>&1 | \
+# RUN: FileCheck %s --allow-empty --implicit-check-not='warning:'
+
+# RUN: llvm-libtool-darwin -arch_only x86_64 -static -o %t.lib \
+# RUN: %t-non-empty.o %t-armv7-empty.o 2>&1 | \
+# RUN: FileCheck %s --allow-empty --implicit-check-not='warning:'
+
+# RUN: llvm-libtool-darwin -static -o %t.lib %t-empty.bc 2>&1 | \
+# RUN: FileCheck %s --allow-empty --implicit-check-not='warning:'
+
+## x86_64
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACF
+ cputype: 0x1000007
+ cpusubtype: 0x3
+ filetype: 0x1
+ ncmds: 0
+ sizeofcmds: 0
+ flags: 0x2000
+ reserved: 0x0
+...
+
+## armv7
+--- !mach-o
+FileHeader:
+ magic: 0xFEEDFACE
+ cputype: 0x0000000C
+ cpusubtype: 0x00000009
+ filetype: 0x00000001
+ ncmds: 0
+ sizeofcmds: 0
+ flags: 0x00002000
diff --git a/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp b/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp
index 1ff6328e..0217364 100644
--- a/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp
+++ b/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp
@@ -89,6 +89,11 @@ static cl::opt<bool>
VersionOption("V", cl::desc("Print the version number and exit"),
cl::cat(LibtoolCategory));
+static cl::opt<bool> NoWarningForNoSymbols(
+ "no_warning_for_no_symbols",
+ cl::desc("Do not warn about files that have no symbols"),
+ cl::cat(LibtoolCategory), cl::init(false));
+
static const std::array<std::string, 3> StandardSearchDirs{
"/lib",
"/usr/lib",
@@ -251,6 +256,9 @@ static Error verifyAndAddMachOObject(MembersPerArchitectureMap &Members,
return Error::success();
}
+ if (!NoWarningForNoSymbols && O->symbols().empty())
+ WithColor::warning() << Member.MemberName + " has no symbols\n";
+
uint64_t FileCPUID = getCPUID(FileCPUType, FileCPUSubtype);
Members[FileCPUID].push_back(std::move(Member));
return Error::success();