llvm-readobj: print out the fields of the COFF delay-import table
authorRui Ueyama <ruiu@google.com>
Fri, 3 Oct 2014 18:07:18 +0000 (18:07 +0000)
committerRui Ueyama <ruiu@google.com>
Fri, 3 Oct 2014 18:07:18 +0000 (18:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218996 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/COFF.h
lib/Object/COFFObjectFile.cpp
test/tools/llvm-readobj/imports.test
tools/llvm-readobj/COFFDumper.cpp

index c7fe2926bfa2a3fb945506d7250708ba98d2715e..8b8ebbb3fcd58c2b78d29dc8f0f973d35d00dbe0 100644 (file)
@@ -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;
index e4ff074945d3f163efbcec93d4f5e7e301905049..bd7015713f925142d48b2eb854823d640dc47985 100644 (file)
@@ -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;
index 531fb32561af483732af1e4662b754f1f2973456..82b7dc711c8d02ef37a9862d0c88064ac152f337 100644 (file)
@@ -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: }
index 1697a55b718b06f5224c27359dc766853d87a350..53fba14a36e33ba32354e831b339d1fd4fa3e37b 100644 (file)
@@ -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());
   }
 }