From: Rui Ueyama Date: Fri, 3 Oct 2014 18:07:18 +0000 (+0000) Subject: llvm-readobj: print out the fields of the COFF delay-import table X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a6abd9e17633eb2595558b6cdece819711915d67;p=oota-llvm.git llvm-readobj: print out the fields of the COFF delay-import table git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218996 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/COFF.h b/include/llvm/Object/COFF.h index c7fe2926bfa..8b8ebbb3fcd 100644 --- a/include/llvm/Object/COFF.h +++ b/include/llvm/Object/COFF.h @@ -712,6 +712,8 @@ public: imported_symbol_iterator imported_symbol_end() const; std::error_code getName(StringRef &Result) const; + std::error_code getDelayImportTable( + const delay_import_directory_table_entry *&Result) const; private: const delay_import_directory_table_entry *Table; diff --git a/lib/Object/COFFObjectFile.cpp b/lib/Object/COFFObjectFile.cpp index e4ff074945d..bd7015713f9 100644 --- a/lib/Object/COFFObjectFile.cpp +++ b/lib/Object/COFFObjectFile.cpp @@ -1179,6 +1179,12 @@ std::error_code DelayImportDirectoryEntryRef::getName(StringRef &Result) const { return object_error::success; } +std::error_code DelayImportDirectoryEntryRef:: +getDelayImportTable(const delay_import_directory_table_entry *&Result) const { + Result = Table; + return object_error::success; +} + bool ExportDirectoryEntryRef:: operator==(const ExportDirectoryEntryRef &Other) const { return ExportTable == Other.ExportTable && Index == Other.Index; diff --git a/test/tools/llvm-readobj/imports.test b/test/tools/llvm-readobj/imports.test index 531fb32561a..82b7dc711c8 100644 --- a/test/tools/llvm-readobj/imports.test +++ b/test/tools/llvm-readobj/imports.test @@ -28,6 +28,12 @@ X86-NEXT: Symbol: (3) X86-NEXT: } X86-NEXT: DelayImport { X86-NEXT: Name: lazyload.dll +X86-NEXT: Attributes: 0x1 +X86-NEXT: ModuleHandle: 0x301C +X86-NEXT: ImportAddressTable: 0x3010 +X86-NEXT: ImportNameTable: 0x2090 +X86-NEXT: BoundDelayImportTable: 0x20AC +X86-NEXT: UnloadDelayImportTable: 0x0 X86-NEXT: Symbol: Func5 (0) X86-NEXT: Symbol: Func4 (0) X86-NEXT: } @@ -59,6 +65,12 @@ X64-NEXT: Symbol: (3) X64-NEXT: } X64-NEXT: DelayImport { X64-NEXT: Name: lazyload.dll +X64-NEXT: Attributes: 0x1 +X64-NEXT: ModuleHandle: 0x3028 +X64-NEXT: ImportAddressTable: 0x3010 +X64-NEXT: ImportNameTable: 0x20E0 +X64-NEXT: BoundDelayImportTable: 0x2108 +X64-NEXT: UnloadDelayImportTable: 0x0 X64-NEXT: Symbol: Func5 (0) X64-NEXT: Symbol: Func4 (0) X64-NEXT: } diff --git a/tools/llvm-readobj/COFFDumper.cpp b/tools/llvm-readobj/COFFDumper.cpp index 1697a55b718..53fba14a36e 100644 --- a/tools/llvm-readobj/COFFDumper.cpp +++ b/tools/llvm-readobj/COFFDumper.cpp @@ -921,6 +921,14 @@ void COFFDumper::printCOFFImports() { StringRef Name; if (error(I->getName(Name))) return; W.printString("Name", Name); + const delay_import_directory_table_entry *Table; + if (error(I->getDelayImportTable(Table))) return; + W.printHex("Attributes", Table->Attributes); + W.printHex("ModuleHandle", Table->ModuleHandle); + W.printHex("ImportAddressTable", Table->DelayImportAddressTable); + W.printHex("ImportNameTable", Table->DelayImportNameTable); + W.printHex("BoundDelayImportTable", Table->BoundDelayImportTable); + W.printHex("UnloadDelayImportTable", Table->UnloadDelayImportTable); printImportedSymbols(I->imported_symbol_begin(), I->imported_symbol_end()); } }