diff options
author | Alexander Shaposhnikov <alexshap@fb.com> | 2021-02-11 13:46:49 -0800 |
---|---|---|
committer | Alexander Shaposhnikov <alexshap@fb.com> | 2021-02-16 17:52:12 -0800 |
commit | cdcb60a820571f7384920fb534ce23e7568bfc03 (patch) | |
tree | e31f8b935204a90ee3b6802e59f33f15ea89fd2c /llvm | |
parent | c62b737ad655f189cf76f4324ba04317133d6648 (diff) | |
download | llvm-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.rst | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-libtool-darwin/no-symbols-warning.test | 50 | ||||
-rw-r--r-- | llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp | 8 |
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(); |