[PATCH] D120913: [NFC][llvm-nm] create a new helper function exportSymbolNamesFromFiles for --export-symbols
Digger Lin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 3 08:38:10 PST 2022
DiggerLin created this revision.
DiggerLin added reviewers: jhenderson, MaskRay, hubert.reinterpretcast.
Herald added a subscriber: rupprecht.
Herald added a project: All.
DiggerLin requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
create a new helper function exportSymbolNamesFromFiles for --export-symbols
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D120913
Files:
llvm/tools/llvm-nm/llvm-nm.cpp
Index: llvm/tools/llvm-nm/llvm-nm.cpp
===================================================================
--- llvm/tools/llvm-nm/llvm-nm.cpp
+++ llvm/tools/llvm-nm/llvm-nm.cpp
@@ -2237,12 +2237,12 @@
/*PrintObjectLabel=*/false);
}
-static void dumpSymbolNamesFromFile(std::string &Filename,
- std::vector<NMSymbol> *SymbolList) {
+static std::vector<NMSymbol> dumpSymbolNamesFromFile(std::string &Filename) {
+ std::vector<NMSymbol> SymbolList;
ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrErr =
MemoryBuffer::getFileOrSTDIN(Filename);
if (error(BufferOrErr.getError(), Filename))
- return;
+ return SymbolList;
LLVMContext Context;
LLVMContext *ContextPtr = NoLLVMBitcode ? nullptr : &Context;
@@ -2250,17 +2250,38 @@
createBinary(BufferOrErr.get()->getMemBufferRef(), ContextPtr);
if (!BinaryOrErr) {
error(BinaryOrErr.takeError(), Filename);
- return;
+ return SymbolList;
}
Binary &Bin = *BinaryOrErr.get();
if (Archive *A = dyn_cast<Archive>(&Bin))
- dumpArchive(A, *SymbolList, Filename, ContextPtr);
+ dumpArchive(A, SymbolList, Filename, ContextPtr);
else if (MachOUniversalBinary *UB = dyn_cast<MachOUniversalBinary>(&Bin))
- dumpMachOUniversalBinary(UB, *SymbolList, Filename, ContextPtr);
+ dumpMachOUniversalBinary(UB, SymbolList, Filename, ContextPtr);
else if (TapiUniversal *TU = dyn_cast<TapiUniversal>(&Bin))
- dumpTapiUniversal(TU, *SymbolList, Filename);
+ dumpTapiUniversal(TU, SymbolList, Filename);
else if (SymbolicFile *O = dyn_cast<SymbolicFile>(&Bin))
- dumpSymbolicFile(O, *SymbolList, Filename);
+ dumpSymbolicFile(O, SymbolList, Filename);
+ return SymbolList;
+}
+
+static void
+exportSymbolNamesFromFiles(const std::vector<std::string> &InputFilenames) {
+ std::vector<NMSymbol> SymbolList;
+ for (auto &FileName : InputFilenames) {
+ const std::vector<NMSymbol> &FileSymList =
+ dumpSymbolNamesFromFile(const_cast<std::string &>(FileName));
+ SymbolList.insert(SymbolList.end(), FileSymList.begin(), FileSymList.end());
+ }
+
+ // Delete symbols which should not be printed from SymolList.
+ SymbolList.erase(
+ std::remove_if(SymbolList.begin(), SymbolList.end(),
+ [](const NMSymbol &s) { return !s.shouldPrint(); }),
+ SymbolList.end());
+ sortSymbolList(SymbolList);
+ SymbolList.erase(std::unique(SymbolList.begin(), SymbolList.end()),
+ SymbolList.end());
+ printExportSymbolList(SymbolList);
}
int main(int argc, char **argv) {
@@ -2418,22 +2439,10 @@
if (NoDyldInfo && (AddDyldInfo || DyldInfoOnly))
error("--no-dyldinfo can't be used with --add-dyldinfo or --dyldinfo-only");
- std::vector<NMSymbol> SymbolList;
-
- llvm::for_each(InputFilenames, std::bind(dumpSymbolNamesFromFile,
- std::placeholders::_1, &SymbolList));
-
- if (ExportSymbols) {
- // Delete symbols which should not be printed from SymolList.
- SymbolList.erase(
- std::remove_if(SymbolList.begin(), SymbolList.end(),
- [](const NMSymbol &s) { return !s.shouldPrint(); }),
- SymbolList.end());
- sortSymbolList(SymbolList);
- SymbolList.erase(std::unique(SymbolList.begin(), SymbolList.end()),
- SymbolList.end());
- printExportSymbolList(SymbolList);
- }
+ if (ExportSymbols)
+ exportSymbolNamesFromFiles(InputFilenames);
+ else
+ llvm::for_each(InputFilenames, dumpSymbolNamesFromFile);
if (HadError)
return 1;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D120913.412735.patch
Type: text/x-patch
Size: 3601 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220303/82cb98e3/attachment.bin>
More information about the llvm-commits
mailing list