Construct subprogram DIEs using DebugInfo.
authorDevang Patel <dpatel@apple.com>
Mon, 5 Jan 2009 23:21:35 +0000 (23:21 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 5 Jan 2009 23:21:35 +0000 (23:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61772 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfWriter.cpp

index 026671436c0d42058284383b4ae1b9f8fbeb0c00..a2543f9f5586c61d739fbd3632c89ead29170613 100644 (file)
@@ -3214,6 +3214,45 @@ private:
     }
   }
 
+  /// ConstructSubprograms - Create DIEs for each of the externally visible
+  /// subprograms.
+  void ConstructSubprograms() {
+
+    std::string SPName = "llvm.dbg.subprograms";
+    std::vector<GlobalVariable*> Result;
+    getGlobalVariablesUsing(*M, SPName, Result);
+    for (std::vector<GlobalVariable *>::iterator RI = Result.begin(),
+           RE = Result.end(); RI != RE; ++RI) {
+
+      DISubprogram *SP = new DISubprogram(*RI);
+      CompileUnit *Unit = FindCompileUnit(SP->getCompileUnit());
+
+      // Check for pre-existence.                                                         
+      DIE *&Slot = Unit->getDieMapSlotFor(SP->getGV());
+      if (Slot) continue;
+
+      DIE *SubprogramDie = new DIE(DW_TAG_subprogram);
+      AddString(SubprogramDie, DW_AT_name, DW_FORM_string, SP->getName());
+      const std::string &LinkageName = SP->getLinkageName();
+      if (!LinkageName.empty())
+        AddString(SubprogramDie, DW_AT_MIPS_linkage_name, DW_FORM_string,
+                  LinkageName);
+      DIType SPTy = SP->getType();
+      AddType(Unit, SubprogramDie, SPTy);
+      if (!SP->isLocalToUnit())
+        AddUInt(SubprogramDie, DW_AT_external, DW_FORM_flag, 1);
+      AddUInt(SubprogramDie, DW_AT_prototyped, DW_FORM_flag, 1);
+
+      AddSourceLine(SubprogramDie, SP);
+      //Add to map.
+      Slot = SubprogramDie;
+      //Add to context owner.
+      Unit->getDie()->AddChild(SubprogramDie);
+      //Expose as global.
+      Unit->AddGlobal(SP->getName(), SubprogramDie);
+    }
+  }
+
   /// ConstructSubprogramDIEs - Create DIEs for each of the externally visible
   /// subprograms.
   void ConstructSubprogramDIEs() {