diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp
index 2b83588..2acf287 100644
--- a/lib/CodeGen/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter.cpp
@@ -1285,6 +1285,10 @@
     << "label" << MI->getOperand(0).getImm() << ":\n";
 }
 
+void AsmPrinter::printLabel(unsigned Id) const {
+  O << "\n" << TAI->getPrivateGlobalPrefix() << "label" << Id << ":\n";
+}
+
 /// PrintAsmOperand - Print the specified operand of MI, an INLINEASM
 /// instruction, using the specified assembler variant.  Targets should
 /// overried this to format as appropriate.
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index de57096..96f7c19 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -2721,6 +2721,11 @@
     
     // Assumes in correct section after the entry point.
     EmitLabel("func_begin", ++SubprogramCount);
+
+    // Emit label for the implicitly defined dbg.stoppoint at the start of
+    // the function.
+    const SourceLineInfo &LineInfo = MMI->getSourceLines()[0];
+    Asm->printLabel(LineInfo.getLabelID());
   }
   
   /// EndFunction - Gather and emit post-function debug information.
diff --git a/lib/CodeGen/PrologEpilogInserter.cpp b/lib/CodeGen/PrologEpilogInserter.cpp
index 34cbb2b..41efbef 100644
--- a/lib/CodeGen/PrologEpilogInserter.cpp
+++ b/lib/CodeGen/PrologEpilogInserter.cpp
@@ -249,13 +249,6 @@
   MachineBasicBlock *MBB = Fn.begin();
   MachineBasicBlock::iterator I = MBB->begin();
 
-  // Do not insert prologue code before debug LABELs at the start of the
-  // entry block.
-  MachineModuleInfo *MMI = FFI->getMachineModuleInfo();
-  if (MMI && MMI->hasDebugInfo())
-    while (I != MBB->end() && I->isDebugLabel())
-      ++I;
-
   if (!TII.spillCalleeSavedRegisters(*MBB, I, CSI)) {
     for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
       // Add the callee-saved register as live-in. It's killed at the spill.
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
index aad1f87..3ecd623 100644
--- a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
@@ -711,28 +711,7 @@
       }
     }
 
-    // Now that we have emitted all operands, emit this instruction itself.
-    if (ISD::isDebugLabel(Node) &&
-        !BB->empty() && &MF->front() == BB) {
-      // If we are inserting a debug label and this happens to be the first
-      // debug label in the entry block, it is the "function start" label.
-      // Make sure there are no other instructions before it.
-      unsigned NumLabels = 0;
-      MachineBasicBlock::iterator MBBI = BB->begin();
-      while (MBBI != BB->end()) {
-        // FIXME: This is a nasty short term workaround. For now, we are
-        // assuming there are two debug labels at the beginning of the
-        // entry block: one for dbg_func_start, one for the first
-        // dbg_stoppoint before actual code.
-        if (!MBBI->isDebugLabel() || ++NumLabels > 1)
-          break;
-        ++MBBI;
-      }
-      if (NumLabels <= 1)
-        BB->insert(BB->begin(), MI);
-      else
-        BB->push_back(MI);
-    } else if (II.usesCustomDAGSchedInsertionHook())
+    if (II.usesCustomDAGSchedInsertionHook())
       // Insert this instruction into the basic block using a target
       // specific inserter which may returns a new basic block.
       BB = DAG.getTargetLoweringInfo().EmitInstrWithCustomInserter(MI, BB);
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 4d1e7eb..2d88387 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -2641,13 +2641,21 @@
   }
   case Intrinsic::dbg_func_start: {
     MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
+    if (!MMI) return 0;
     DbgFuncStartInst &FSI = cast<DbgFuncStartInst>(I);
-    if (MMI && FSI.getSubprogram() &&
-        MMI->Verify(FSI.getSubprogram())) {
-      unsigned LabelID = MMI->RecordRegionStart(FSI.getSubprogram());
-      DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other, getRoot(),
-                              DAG.getConstant(LabelID, MVT::i32),
-                              DAG.getConstant(0, MVT::i32)));
+    Value *SP = FSI.getSubprogram();
+    if (SP && MMI->Verify(SP)) {
+      // llvm.dbg.func.start implicitly defines a dbg_stoppoint which is
+      // what (most?) gdb expects.
+      DebugInfoDesc *DD = MMI->getDescFor(SP);
+      assert(DD && "Not a debug information descriptor");
+      SubprogramDesc *Subprogram = cast<SubprogramDesc>(DD);
+      const CompileUnitDesc *CompileUnit = Subprogram->getFile();
+      unsigned SrcFile = MMI->RecordSource(CompileUnit->getDirectory(),
+                                           CompileUnit->getFileName());
+      // Record the source line but does create a label. It will be emitted
+      // at asm emission time.
+      MMI->RecordSourceLine(Subprogram->getLine(), 0, SrcFile);
     }
 
     return 0;
