aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Brachet <abrachet@google.com>2022-02-17 19:24:53 +0000
committerAlex Brachet <abrachet@google.com>2022-02-17 19:24:53 +0000
commitdf2812d8de2ac99d46c8786c00922c09a5b65db0 (patch)
treecbfbd6469a73798d074ef58afa42e7f413a26319
parenta52b9102d1f75ca0229e5e395d317fb9ecd51590 (diff)
downloadllvm-df2812d8de2ac99d46c8786c00922c09a5b65db0.zip
llvm-df2812d8de2ac99d46c8786c00922c09a5b65db0.tar.gz
llvm-df2812d8de2ac99d46c8786c00922c09a5b65db0.tar.bz2
[ifs] Add --strip-needed flag
Reviewed By: haowei, mcgrathr Differential Revision: https://reviews.llvm.org/D119907
-rw-r--r--llvm/test/tools/llvm-ifs/strip-needed.test26
-rw-r--r--llvm/tools/llvm-ifs/llvm-ifs.cpp6
2 files changed, 32 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-ifs/strip-needed.test b/llvm/test/tools/llvm-ifs/strip-needed.test
new file mode 100644
index 0000000..1ef579f8
--- /dev/null
+++ b/llvm/test/tools/llvm-ifs/strip-needed.test
@@ -0,0 +1,26 @@
+## Test --strip-needed flag
+
+# RUN: llvm-ifs --input-format=IFS --strip-needed --output-ifs=- %s | FileCheck %s
+
+# RUN: llvm-ifs --input-format=IFS --output-elf=- %s | \
+# RUN: obj2yaml | FileCheck %s --check-prefix=FROM-ELF
+
+# RUN: llvm-ifs --input-format=IFS --strip-needed --output-elf=- %s | \
+# RUN: obj2yaml | FileCheck %s --check-prefix=FROM-ELF-STRIP-NEEDED
+
+--- !ifs-v1
+IfsVersion: 3.0
+Target: { ObjectFormat: ELF, Arch: AArch64, Endianness: little, BitWidth: 64 }
+NeededLibs:
+ - ''
+Symbols: []
+...
+
+# CHECK: --- !ifs-v1
+# CHECK-NEXT: IfsVersion: {{[1-9]\d*\.(0|([1-9]\d*))}}
+# CHECK-NEXT: Target: { ObjectFormat: ELF, Arch: AArch64, Endianness: little, BitWidth: 64 }
+# CHECK-NEXT: Symbols: []
+# CHECK-NEXT: ...
+
+# FROM-ELF: DT_NEEDED
+# FROM-ELF-STRIP-NEEDED-NOT: DT_NEEDED
diff --git a/llvm/tools/llvm-ifs/llvm-ifs.cpp b/llvm/tools/llvm-ifs/llvm-ifs.cpp
index 2dcd0c5..ef8864e 100644
--- a/llvm/tools/llvm-ifs/llvm-ifs.cpp
+++ b/llvm/tools/llvm-ifs/llvm-ifs.cpp
@@ -103,6 +103,9 @@ cl::opt<bool>
StripUndefined("strip-undefined",
cl::desc("Strip undefined symbols from IFS output"),
cl::cat(IfsCategory));
+cl::opt<bool> StripNeededLibs("strip-needed",
+ cl::desc("Strip needed libs from output"),
+ cl::cat(IfsCategory));
cl::opt<std::string>
SoName("soname",
@@ -417,6 +420,9 @@ int main(int argc, char *argv[]) {
if (OverrideError)
fatalError(std::move(OverrideError));
+ if (StripNeededLibs)
+ Stub.NeededLibs.clear();
+
if (OutputELFFilePath.getNumOccurrences() == 0 &&
OutputIFSFilePath.getNumOccurrences() == 0 &&
OutputTBDFilePath.getNumOccurrences() == 0) {