summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/COFFDumper.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2017-06-23 22:12:11 +0000
committerReid Kleckner <rnk@google.com>2017-06-23 22:12:11 +0000
commit45cb4fec1ec3d8ab9907e7a4924ab381f892a429 (patch)
tree3a1cfb7e17004b4e556cd8f02b488b03f46042af /llvm/tools/llvm-readobj/COFFDumper.cpp
parentdd239718bd13ecb19e0a233a4d64245475dc9cf2 (diff)
downloadbcm5719-llvm-45cb4fec1ec3d8ab9907e7a4924ab381f892a429.tar.gz
bcm5719-llvm-45cb4fec1ec3d8ab9907e7a4924ab381f892a429.zip
[llvm-readobj] Fix COFF RVA table dumping bug
We would return an error in getVaPtr if the RVA table being dumped was the last data in the .rdata section. Avoid the issue by subtracting one from the offset and adding it back to get an open interval again. llvm-svn: 306171
Diffstat (limited to 'llvm/tools/llvm-readobj/COFFDumper.cpp')
-rw-r--r--llvm/tools/llvm-readobj/COFFDumper.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index 373c528feea..daa7a643a72 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -763,7 +763,8 @@ void COFFDumper::printRVATable(uint64_t TableVA, uint64_t Count,
uint64_t EntrySize, PrintExtraCB PrintExtra) {
uintptr_t TableStart, TableEnd;
error(Obj->getVaPtr(TableVA, TableStart));
- error(Obj->getVaPtr(TableVA + Count * EntrySize, TableEnd));
+ error(Obj->getVaPtr(TableVA + Count * EntrySize - 1, TableEnd));
+ TableEnd++;
for (uintptr_t I = TableStart; I < TableEnd; I += EntrySize) {
uint32_t RVA = *reinterpret_cast<const ulittle32_t *>(I);
raw_ostream &OS = W.startLine();
@@ -804,6 +805,9 @@ void COFFDumper::printCOFFLoadConfig() {
template <typename T>
void COFFDumper::printCOFFLoadConfig(const T *Conf, LoadConfigTables &Tables) {
+ if (!Conf)
+ return;
+
ListScope LS(W, "LoadConfig");
char FormattedTime[20] = {};
time_t TDS = Conf->TimeDateStamp;
OpenPOWER on IntegriCloud