summaryrefslogtreecommitdiff
path: root/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--tools/llvm-objdump/llvm-objdump.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp
index 8d934cf948..d8460fdb24 100644
--- a/tools/llvm-objdump/llvm-objdump.cpp
+++ b/tools/llvm-objdump/llvm-objdump.cpp
@@ -405,6 +405,10 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
if (error(I->getAddress(SectionAddr)))
break;
+ uint64_t SectSize;
+ if (error(I->getSize(SectSize)))
+ break;
+
// Make a list of all the symbols in this section.
std::vector<std::pair<uint64_t, StringRef> > Symbols;
for (symbol_iterator SI = Obj->symbol_begin(), SE = Obj->symbol_end();
@@ -417,6 +421,8 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
if (Address == UnknownAddressOrSize)
continue;
Address -= SectionAddr;
+ if (Address >= SectSize)
+ continue;
StringRef Name;
if (error(SI->getName(Name)))
@@ -473,9 +479,6 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
StringRefMemoryObject memoryObject(Bytes, SectionAddr);
uint64_t Size;
uint64_t Index;
- uint64_t SectSize;
- if (error(I->getSize(SectSize)))
- break;
std::vector<RelocationRef>::const_iterator rel_cur = Rels.begin();
std::vector<RelocationRef>::const_iterator rel_end = Rels.end();