diff options
author | Devang Patel <dpatel@apple.com> | 2009-10-08 18:48:03 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-10-08 18:48:03 +0000 |
commit | eda312193dfc56cb9a5d1d3e7cf3c89dce07124a (patch) | |
tree | ff460699e26a458c56c6f572caca32aca8ca2470 /lib/CodeGen/AsmPrinter/DwarfDebug.cpp | |
parent | bfa19bf4c2f0d7ac6f69b801abf51adbddc16454 (diff) |
Do not record line number to implicitly mark start of function if function has arguments. Extra line number entries trip gdb in some cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83563 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/AsmPrinter/DwarfDebug.cpp')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 5b3f3cee39..1ea148e549 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1782,17 +1782,23 @@ void DwarfDebug::EndModule() { } /// 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 @@ void DwarfDebug::BeginFunction(MachineFunction *MF) { #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 @@ void DwarfDebug::BeginFunction(MachineFunction *MF) { // 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(); } |