summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2019-04-20 07:19:24 +0000
committerFangrui Song <maskray@google.com>2019-04-20 07:19:24 +0000
commitce12ea8dfc371735672342f2dcc6ecfb32e3b4d7 (patch)
tree6d769f8efa98e79dd4d8ff523336ef84ccce36fa /llvm
parent4d4b5d952e4587d320fa94db5bce783a915d03ee (diff)
downloadbcm5719-llvm-ce12ea8dfc371735672342f2dcc6ecfb32e3b4d7.tar.gz
bcm5719-llvm-ce12ea8dfc371735672342f2dcc6ecfb32e3b4d7.zip
[llvm-objdump] Don't disassemble symbols before SectionAddr
This was caught by UBSAN tools/llvm-objdump/X86/macho-disassembly-g-dsym.test tools/llvm-objdump/X86/hex-displacement.test llvm-svn: 358806
Diffstat (limited to 'llvm')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index fb12e750fc6..37b17cb2f4a 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -1148,13 +1148,15 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
continue;
uint64_t Start = std::get<0>(Symbols[SI]);
+ if (Start < SectionAddr || StopAddress <= Start)
+ continue;
// The end is the section end, the beginning of the next symbol, or
// --stop-address.
- uint64_t End = std::min<uint64_t>(SectionAddr + SectSize, StopAddress);
- if (SI + 1 < SE)
- End = std::min(End, std::get<0>(Symbols[SI + 1]));
- if (Start >= End || Start >= StopAddress || End <= StartAddress)
+ uint64_t End = std::min<uint64_t>(
+ SI + 1 < SE ? std::get<0>(Symbols[SI + 1]) : SectionAddr + SectSize,
+ StopAddress);
+ if (Start >= End || End <= StartAddress)
continue;
Start -= SectionAddr;
End -= SectionAddr;
OpenPOWER on IntegriCloud