diff options
Diffstat (limited to 'tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r-- | tools/llvm-objdump/llvm-objdump.cpp | 9 |
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(); |