diff options
author | Rui Ueyama <ruiu@google.com> | 2014-10-03 00:41:58 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2014-10-03 00:41:58 +0000 |
commit | 15d993591c14bb7f31da95ada32ccb86e62dcdcb (patch) | |
tree | 06436c17a2df6c62ce3ce574309c25f24196c1b8 /llvm/tools/llvm-readobj/COFFDumper.cpp | |
parent | 3eda855c69778f3bc780f9ee12e9e1f9063834f3 (diff) | |
download | llvm-15d993591c14bb7f31da95ada32ccb86e62dcdcb.zip llvm-15d993591c14bb7f31da95ada32ccb86e62dcdcb.tar.gz llvm-15d993591c14bb7f31da95ada32ccb86e62dcdcb.tar.bz2 |
llvm-readobj: print COFF delay-load import table
This patch adds another iterator to access the delay-load import table
and use it from llvm-readobj.
http://reviews.llvm.org/D5594
llvm-svn: 218933
Diffstat (limited to 'llvm/tools/llvm-readobj/COFFDumper.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/COFFDumper.cpp | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp index 3653afa..1697a55 100644 --- a/llvm/tools/llvm-readobj/COFFDumper.cpp +++ b/llvm/tools/llvm-readobj/COFFDumper.cpp @@ -75,6 +75,9 @@ private: std::error_code resolveSymbolName(const coff_section *Section, uint64_t Offset, StringRef &Name); + void printImportedSymbols(imported_symbol_iterator I, + imported_symbol_iterator E); + typedef DenseMap<const coff_section*, std::vector<RelocationRef> > RelocMapTy; const llvm::object::COFFObjectFile *Obj; @@ -883,7 +886,19 @@ void COFFDumper::printUnwindInfo() { } } +void COFFDumper::printImportedSymbols(imported_symbol_iterator I, + imported_symbol_iterator E) { + for (; I != E; ++I) { + StringRef Sym; + if (error(I->getSymbolName(Sym))) return; + uint16_t Ordinal; + if (error(I->getOrdinal(Ordinal))) return; + W.printNumber("Symbol", Sym, Ordinal); + } +} + void COFFDumper::printCOFFImports() { + // Regular imports for (auto I = Obj->import_directory_begin(), E = Obj->import_directory_end(); I != E; ++I) { DictScope Import(W, "Import"); @@ -895,13 +910,17 @@ void COFFDumper::printCOFFImports() { W.printHex("ImportLookupTableRVA", Addr); if (error(I->getImportAddressTableRVA(Addr))) return; W.printHex("ImportAddressTableRVA", Addr); - for (auto J = I->imported_symbol_begin(), F = I->imported_symbol_end(); - J != F; ++J) { - StringRef Sym; - if (error(J->getSymbolName(Sym))) return; - uint16_t Ordinal; - if (error(J->getOrdinal(Ordinal))) return; - W.printNumber("Symbol", Sym, Ordinal); - } + printImportedSymbols(I->imported_symbol_begin(), I->imported_symbol_end()); + } + + // Delay imports + for (auto I = Obj->delay_import_directory_begin(), + E = Obj->delay_import_directory_end(); + I != E; ++I) { + DictScope Import(W, "DelayImport"); + StringRef Name; + if (error(I->getName(Name))) return; + W.printString("Name", Name); + printImportedSymbols(I->imported_symbol_begin(), I->imported_symbol_end()); } } |