summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/COFFObjectFile.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-11-13 03:22:54 +0000
committerRui Ueyama <ruiu@google.com>2014-11-13 03:22:54 +0000
commitffa4cebe91736a0f9ead025771b29ff3bb41e4a0 (patch)
tree3606e94eff67b7642dac82f77ac1154ae71c9a7c /llvm/lib/Object/COFFObjectFile.cpp
parent0f7abef2cf335a5b3e752440dd05607d9859c0ed (diff)
downloadbcm5719-llvm-ffa4cebe91736a0f9ead025771b29ff3bb41e4a0.tar.gz
bcm5719-llvm-ffa4cebe91736a0f9ead025771b29ff3bb41e4a0.zip
llvm-readobj: Print out address table when dumping COFF delay-import table
llvm-svn: 221855
Diffstat (limited to 'llvm/lib/Object/COFFObjectFile.cpp')
-rw-r--r--llvm/lib/Object/COFFObjectFile.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp
index eea84c78762..dadad1f2603 100644
--- a/llvm/lib/Object/COFFObjectFile.cpp
+++ b/llvm/lib/Object/COFFObjectFile.cpp
@@ -1258,6 +1258,20 @@ getDelayImportTable(const delay_import_directory_table_entry *&Result) const {
return object_error::success;
}
+std::error_code DelayImportDirectoryEntryRef::
+getImportAddress(int AddrIndex, uint64_t &Result) const {
+ uint32_t RVA = Table[Index].DelayImportAddressTable +
+ AddrIndex * (OwningObject->is64() ? 8 : 4);
+ uintptr_t IntPtr = 0;
+ if (std::error_code EC = OwningObject->getRvaPtr(RVA, IntPtr))
+ return EC;
+ if (OwningObject->is64())
+ Result = *reinterpret_cast<const uint64_t *>(IntPtr);
+ else
+ Result = *reinterpret_cast<const uint32_t *>(IntPtr);
+ return object_error::success;
+}
+
bool ExportDirectoryEntryRef::
operator==(const ExportDirectoryEntryRef &Other) const {
return ExportTable == Other.ExportTable && Index == Other.Index;
OpenPOWER on IntegriCloud