[LLVMSymbolize] Simplify SymbolizableObjectFile::symbolizeInlinedCode(). NFC.
authorAlexey Samsonov <vonosmas@gmail.com>
Fri, 30 Oct 2015 00:02:55 +0000 (00:02 +0000)
committerAlexey Samsonov <vonosmas@gmail.com>
Fri, 30 Oct 2015 00:02:55 +0000 (00:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251672 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/DebugInfo/DIContext.h
lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp

index e98665f2b0d2783eaf31f4efba9c2a586d408e4b..1ca7b044df1bd8ce2368858a511e57f8b64be151 100644 (file)
@@ -57,6 +57,10 @@ class DIInliningInfo {
     assert(Index < Frames.size());
     return Frames[Index];
   }
+  DILineInfo *getMutableFrame(unsigned Index) {
+    assert(Index < Frames.size());
+    return &Frames[Index];
+  }
   uint32_t getNumberOfFrames() const {
     return Frames.size();
   }
index fb2873e8159d03bc6ff50a62f9b4510fe30c6432..d3a54ca8d479e199288193733c7790df2c566281 100644 (file)
@@ -217,26 +217,18 @@ DIInliningInfo SymbolizableObjectFile::symbolizeInlinedCode(
   if (InlinedContext.getNumberOfFrames() == 0)
     InlinedContext.addFrame(DILineInfo());
 
-  if (FNKind != FunctionNameKind::LinkageName || !UseSymbolTable)
-    return InlinedContext;
-
   // Override the function name in lower frame with name from symbol table.
-  // We can't directly change the last element of DIInliningInfo, so copy
-  // all frames into new context, replacing function name in the last one.
-  DIInliningInfo PatchedInlinedContext;
-  for (uint32_t i = 0, n = InlinedContext.getNumberOfFrames(); i < n; i++) {
-    DILineInfo LineInfo = InlinedContext.getFrame(i);
-    if (i == n - 1) {
-      std::string FunctionName;
-      uint64_t Start, Size;
-      if (getNameFromSymbolTable(SymbolRef::ST_Function, ModuleOffset,
-                                 FunctionName, Start, Size)) {
-        LineInfo.FunctionName = FunctionName;
-      }
+  if (FNKind == FunctionNameKind::LinkageName && UseSymbolTable) {
+    std::string FunctionName;
+    uint64_t Start, Size;
+    if (getNameFromSymbolTable(SymbolRef::ST_Function, ModuleOffset,
+                               FunctionName, Start, Size)) {
+      InlinedContext.getMutableFrame(InlinedContext.getNumberOfFrames() - 1)
+          ->FunctionName = FunctionName;
     }
-    PatchedInlinedContext.addFrame(LineInfo);
   }
-  return PatchedInlinedContext;
+
+  return InlinedContext;
 }
 
 DIGlobal SymbolizableObjectFile::symbolizeData(uint64_t ModuleOffset) const {