[llvm] r357683 - [Symbolize] Keep SymbolDescs with the same address and improve getNameFromSymbolTable heuristic

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 4 04:08:46 PDT 2019


Author: maskray
Date: Thu Apr  4 04:08:45 2019
New Revision: 357683

URL: http://llvm.org/viewvc/llvm-project?rev=357683&view=rev
Log:
[Symbolize] Keep SymbolDescs with the same address and improve getNameFromSymbolTable heuristic

I'll follow up with better heuristics or tests.

Modified:
    llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp
    llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.h

Modified: llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp?rev=357683&r1=357682&r2=357683&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp (original)
+++ llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp Thu Apr  4 04:08:45 2019
@@ -198,7 +198,10 @@ bool SymbolizableObjectFile::getNameFrom
   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;

Modified: llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.h?rev=357683&r1=357682&r2=357683&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.h (original)
+++ llvm/trunk/lib/DebugInfo/Symbolize/SymbolizableObjectFile.h Thu Apr  4 04:08:45 2019
@@ -75,8 +75,8 @@ private:
     // the following symbol.
     uint64_t Size;
 
-    friend bool operator<(const SymbolDesc &s1, const SymbolDesc &s2) {
-      return s1.Addr < s2.Addr;
+    bool operator<(const SymbolDesc &RHS) const {
+      return Addr != RHS.Addr ? Addr < RHS.Addr : Size < RHS.Size;
     }
   };
   std::map<SymbolDesc, StringRef> Functions;




More information about the llvm-commits mailing list