summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2013-07-19 23:23:29 +0000
committerRui Ueyama <ruiu@google.com>2013-07-19 23:23:29 +0000
commited64342b67de1bbbd9e2421a64442d8eb5825bd8 (patch)
treed3e99d3e7fe519fd9e12570de035d4632cc6ec03 /llvm/tools
parente210839f5b36f652919772ebfaaa1693e151dc56 (diff)
downloadbcm5719-llvm-ed64342b67de1bbbd9e2421a64442d8eb5825bd8.tar.gz
bcm5719-llvm-ed64342b67de1bbbd9e2421a64442d8eb5825bd8.zip
Retry submitting r186623: COFFDumper: Dump data directory entries.
The original change was rolled back in r186627 because of test failures on the big endian machine. I believe I fixed the issue so re-submitting. llvm-svn: 186734
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-readobj/COFFDumper.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index 1ceb8fcd316..2f309e30ec2 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -60,6 +60,8 @@ private:
void printRelocation(section_iterator SecI, relocation_iterator RelI);
+ void printDataDirectory(uint32_t Index, const std::string &FieldName);
+
void printX64UnwindInfo();
void printRuntimeFunction(
@@ -560,6 +562,14 @@ void COFFDumper::cacheRelocations() {
}
}
+void COFFDumper::printDataDirectory(uint32_t Index, const std::string &FieldName) {
+ const data_directory *Data;
+ if (Obj->getDataDirectory(Index, Data))
+ return;
+ W.printHex(FieldName + "RVA", Data->RelativeVirtualAddress);
+ W.printHex(FieldName + "Size", Data->Size);
+}
+
void COFFDumper::printFileHeaders() {
// Print COFF header
const coff_file_header *COFFHeader = 0;
@@ -621,6 +631,20 @@ void COFFDumper::printFileHeaders() {
W.printNumber("SizeOfHeapReserve", PEHeader->SizeOfHeapReserve);
W.printNumber("SizeOfHeapCommit", PEHeader->SizeOfHeapCommit);
W.printNumber("NumberOfRvaAndSize", PEHeader->NumberOfRvaAndSize);
+
+ if (PEHeader->NumberOfRvaAndSize > 0) {
+ DictScope D(W, "DataDirectory");
+ static const char * const directory[] = {
+ "ExportTable", "ImportTable", "ResourceTable", "ExceptionTable",
+ "CertificateTable", "BaseRelocationTable", "Debug", "Architecture",
+ "GlobalPtr", "TLSTable", "LoadConfigTable", "BoundImport", "IAT",
+ "DelayImportDescriptor", "CLRRuntimeHeader", "Reserved"
+ };
+
+ for (uint32_t i = 0; i < PEHeader->NumberOfRvaAndSize; ++i) {
+ printDataDirectory(i, directory[i]);
+ }
+ }
}
}
OpenPOWER on IntegriCloud