[llvm-commits] [llvm] r83563 - in /llvm/trunk/lib/CodeGen/AsmPrinter: DwarfDebug.cpp DwarfDebug.h

Devang Patel dpatel at apple.com
Thu Oct 8 11:48:04 PDT 2009


Author: dpatel
Date: Thu Oct  8 13:48:03 2009
New Revision: 83563

URL: http://llvm.org/viewvc/llvm-project?rev=83563&view=rev
Log:
Do not record line number to implicitly mark start of function if function has arguments. Extra line number entries trip gdb in some cases.

Modified:
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=83563&r1=83562&r2=83563&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Thu Oct  8 13:48:03 2009
@@ -1782,17 +1782,23 @@
 }
 
 /// CollectVariableInfo - Populate DbgScope entries with variables' info.
-void DwarfDebug::CollectVariableInfo() {
-  if (!MMI) return;
+bool DwarfDebug::CollectVariableInfo() {
+  if (!MMI) return false;
+  bool ArgsCollected = false;
   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
          VE = VMap.end(); VI != VE; ++VI) {
     MDNode *Var = VI->first;
+    DIVariable DV (Var);
+    if (DV.isNull()) continue;
+    if (DV.getTag() == dwarf::DW_TAG_arg_variable)
+      ArgsCollected = true;
     DILocation VLoc(VI->second.first);
     unsigned VSlot = VI->second.second;
     DbgScope *Scope = getDbgScope(VLoc.getScope().getNode(), NULL);
-    Scope->AddVariable(new DbgVariable(DIVariable(Var), VSlot, false));
+    Scope->AddVariable(new DbgVariable(DV, VSlot, false));
   }
+  return ArgsCollected;
 }
 
 /// SetDbgScopeBeginLabels - Update DbgScope begin labels for the scopes that
@@ -1903,7 +1909,7 @@
 #ifdef ATTACH_DEBUG_INFO_TO_AN_INSN
   if (!ExtractScopeInformation(MF))
     return;
-  CollectVariableInfo();
+  bool ArgsCollected = CollectVariableInfo();
 #endif
 
   // Begin accumulating function debug information.
@@ -1914,14 +1920,19 @@
 
   // Emit label for the implicitly defined dbg.stoppoint at the start of the
   // function.
-  DebugLoc FDL = MF->getDefaultDebugLoc();
-  if (!FDL.isUnknown()) {
-    DebugLocTuple DLT = MF->getDebugLocTuple(FDL);
-    unsigned LabelID = RecordSourceLine(DLT.Line, DLT.Col, DLT.CompileUnit);
-    Asm->printLabel(LabelID);
-    O << '\n';
+#ifdef ATTACH_DEBUG_INFO_TO_AN_INSN
+  if (!ArgsCollected) {
+#else
+  if (1) {
+#endif
+    DebugLoc FDL = MF->getDefaultDebugLoc();
+    if (!FDL.isUnknown()) {
+      DebugLocTuple DLT = MF->getDebugLocTuple(FDL);
+      unsigned LabelID = RecordSourceLine(DLT.Line, DLT.Col, DLT.CompileUnit);
+      Asm->printLabel(LabelID);
+      O << '\n';
+    }
   }
-
   if (TimePassesIsEnabled)
     DebugTimer->stopTimer();
 }

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=83563&r1=83562&r2=83563&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Thu Oct  8 13:48:03 2009
@@ -556,7 +556,7 @@
   bool ExtractScopeInformation(MachineFunction *MF);
 
   /// CollectVariableInfo - Populate DbgScope entries with variables' info.
-  void CollectVariableInfo();
+  bool CollectVariableInfo();
 
   /// SetDbgScopeBeginLabels - Update DbgScope begin labels for the scopes that
   /// start with this machine instruction.





More information about the llvm-commits mailing list