[PATCH] D108428: [ifs] Add option to hide undefined symbols
Haowei Wu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 27 11:16:16 PDT 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG31e61c58b066: [ifs] Add option to hide undefined symbols (authored by haowei).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D108428/new/
https://reviews.llvm.org/D108428
Files:
llvm/include/llvm/InterfaceStub/IFSHandler.h
llvm/lib/InterfaceStub/IFSHandler.cpp
llvm/test/tools/llvm-ifs/strip-undefined-symbols.test
llvm/tools/llvm-ifs/llvm-ifs.cpp
Index: llvm/tools/llvm-ifs/llvm-ifs.cpp
===================================================================
--- llvm/tools/llvm-ifs/llvm-ifs.cpp
+++ llvm/tools/llvm-ifs/llvm-ifs.cpp
@@ -99,6 +99,11 @@
"strip-ifs-target",
cl::desc("Strip all target information away from IFS output"),
cl::cat(IfsCategory));
+cl::opt<bool>
+ StripUndefined("strip-undefined",
+ cl::desc("Strip undefined symbols from IFS output"),
+ cl::cat(IfsCategory));
+
cl::opt<std::string>
SoName("soname",
cl::desc("Manually set the DT_SONAME entry of any emitted files"),
@@ -443,6 +448,8 @@
stripIFSTarget(Stub, StripIFSTarget, StripIFSArch,
StripIFSEndiannessWidth, StripIFSBitWidth);
}
+ if (StripUndefined)
+ stripIFSUndefinedSymbols(Stub);
Error IFSWriteError = writeIFS(OutputFilePath.getValue(), Stub);
if (IFSWriteError)
fatalError(std::move(IFSWriteError));
Index: llvm/test/tools/llvm-ifs/strip-undefined-symbols.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-ifs/strip-undefined-symbols.test
@@ -0,0 +1,17 @@
+# RUN: llvm-ifs --input-format=ELF --strip-undefined --output-format=IFS --output=- %p/Inputs/gnu_hash.so | FileCheck %s
+
+# CHECK: --- !ifs-v1
+# CHECK-NEXT: IfsVersion: 3.0
+# CHECK-NEXT: SoName: libsomething.so
+# CHECK-NEXT: Target: { ObjectFormat: ELF, Arch: x86_64, Endianness: little, BitWidth: 64 }
+# CHECK-NEXT: NeededLibs:
+# CHECK-NEXT: - libm.so.6
+# CHECK-NEXT: - libc.so.6
+# CHECK-NEXT: - ld-linux-x86-64.so.2
+# CHECK-NEXT: Symbols:
+# CHECK-NEXT: - { Name: AGlobalInteger, Type: Object, Size: 4 }
+# CHECK-NEXT: - { Name: AThreadLocalLongInteger, Type: TLS, Size: 8 }
+# CHECK-NEXT: - { Name: _Z11rotateArrayPii, Type: Func }
+# CHECK-NEXT: - { Name: _fini, Type: Func }
+# CHECK-NEXT: - { Name: _init, Type: Func }
+# CHECK-NEXT: ...
Index: llvm/lib/InterfaceStub/IFSHandler.cpp
===================================================================
--- llvm/lib/InterfaceStub/IFSHandler.cpp
+++ llvm/lib/InterfaceStub/IFSHandler.cpp
@@ -327,3 +327,13 @@
Stub.Target.ObjectFormat.reset();
}
}
+
+void ifs::stripIFSUndefinedSymbols(IFSStub &Stub) {
+ for (auto Iter = Stub.Symbols.begin(); Iter != Stub.Symbols.end();) {
+ if (Iter->Undefined) {
+ Iter = Stub.Symbols.erase(Iter);
+ } else {
+ Iter++;
+ }
+ }
+}
Index: llvm/include/llvm/InterfaceStub/IFSHandler.h
===================================================================
--- llvm/include/llvm/InterfaceStub/IFSHandler.h
+++ llvm/include/llvm/InterfaceStub/IFSHandler.h
@@ -51,6 +51,9 @@
void stripIFSTarget(IFSStub &Stub, bool StripTriple, bool StripArch,
bool StripEndianness, bool StripBitWidth);
+/// Strips symbols from IFS symbol table that are undefined.
+void stripIFSUndefinedSymbols(IFSStub &Stub);
+
/// Parse llvm triple string into a IFSTarget struct.
IFSTarget parseTriple(StringRef TripleStr);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108428.369151.patch
Type: text/x-patch
Size: 3069 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210827/476cc7c2/attachment.bin>
More information about the llvm-commits
mailing list