diff options
Diffstat (limited to 'llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp b/llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp index fc09be2..889b0c1 100644 --- a/llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp +++ b/llvm/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp @@ -198,7 +198,10 @@ bool SymbolizableObjectFile::getNameFromSymbolTable(SymbolRef::Type Type, const auto &SymbolMap = Type == SymbolRef::ST_Function ? Functions : Objects; if (SymbolMap.empty()) return false; - SymbolDesc SD = { Address, Address }; + SymbolDesc SD = {Address, UINT64_C(-1)}; + // SymbolDescs are sorted by (Addr,Size), if several SymbolDescs share the + // same Addr, pick the one with the largest Size. This helps us avoid symbols + // with no size information (Size=0). auto SymbolIterator = SymbolMap.upper_bound(SD); if (SymbolIterator == SymbolMap.begin()) return false; |