If we have a DIE with an AT_specification use that instead of the normal
authorEric Christopher <echristo@apple.com>
Fri, 11 Nov 2011 01:55:22 +0000 (01:55 +0000)
committerEric Christopher <echristo@apple.com>
Fri, 11 Nov 2011 01:55:22 +0000 (01:55 +0000)
addr DIE when adding to the dwarf accelerator tables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144354 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp

index 657763a8fce5002d840fa3d345d6d10365629689..1e5170949e67415e026d3201b2060ff1d2dc22c3 100644 (file)
@@ -1095,6 +1095,7 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
   addToContextOwner(VariableDIE, GVContext);
   // Add location.
   bool addToAccelTable = false;
+  DIE *VariableSpecDIE;
   if (isGlobalVariable) {
     addToAccelTable = true;
     DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
@@ -1106,7 +1107,7 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
     if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
         !GVContext.isFile() && !isSubprogramContext(GVContext)) {
       // Create specification DIE.
-      DIE *VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
+      VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
       addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
                   dwarf::DW_FORM_ref4, VariableDIE);
       addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
@@ -1135,13 +1136,15 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
     addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
   }
 
-  if (addToAccelTable)
-    addAccelName(GV.getName(), VariableDIE);
+  if (addToAccelTable) {
+    DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
+    addAccelName(GV.getName(), AddrDIE);
 
-  // If the linkage name is different than the name, go ahead and output
-  // that as well into the name table.
-  if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
-    addAccelName(GV.getLinkageName(), VariableDIE);
+    // If the linkage name is different than the name, go ahead and output
+    // that as well into the name table.
+    if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
+      addAccelName(GV.getLinkageName(), AddrDIE);
+  }
 
   return;
 }