diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h
index 3d1344e..cda213c 100644
--- a/include/llvm/CodeGen/AsmPrinter.h
+++ b/include/llvm/CodeGen/AsmPrinter.h
@@ -276,6 +276,11 @@
                        unsigned ForcedAlignBits = 0, bool UseFillExpr = false,
                        unsigned FillValue = 0) const;
 
+    /// printLabel - This method prints a local label used by debug and
+    /// exception handling tables.
+    void printLabel(const MachineInstr *MI) const;
+    void printLabel(unsigned Id) const;
+
   protected:
     /// EmitZeros - Emit a block of zeros.
     ///
@@ -299,10 +304,6 @@
     /// instruction that is an inline asm.
     void printInlineAsm(const MachineInstr *MI) const;
     
-    /// printLabel - This method prints a local label used by debug and
-    /// exception handling tables.
-    void printLabel(const MachineInstr *MI) const;
-
     /// printBasicBlockLabel - This method prints the label for the specified
     /// MachineBasicBlock
     virtual void printBasicBlockLabel(const MachineBasicBlock *MBB,
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;
diff --git a/lib/Target/PowerPC/PPCRegisterInfo.cpp b/lib/Target/PowerPC/PPCRegisterInfo.cpp
index fa21826..efed072 100644
--- a/lib/Target/PowerPC/PPCRegisterInfo.cpp
+++ b/lib/Target/PowerPC/PPCRegisterInfo.cpp
@@ -712,16 +712,6 @@
   // Prepare for frame info.
   unsigned FrameLabelId = 0;
   
-  // Skip over the debug labels which mark the beginning of the function.
-  if (MMI && MMI->needsFrameInfo()) {
-    unsigned NumLabels = 0;
-    while (NumLabels <= 1 &&
-           MBBI != MBB.end() && MBBI->isDebugLabel()) {
-      ++NumLabels;
-      ++MBBI;
-    }
-  }
-
   // Scan the prolog, looking for an UPDATE_VRSAVE instruction.  If we find it,
   // process it.
   for (unsigned i = 0; MBBI != MBB.end(); ++i, ++MBBI) {
diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp
index 5f9f290..a0ffd33 100644
--- a/lib/Target/X86/X86RegisterInfo.cpp
+++ b/lib/Target/X86/X86RegisterInfo.cpp
@@ -525,16 +525,6 @@
           X86FI->getCalleeSavedFrameSize() +(-TailCallReturnAddrDelta));
   uint64_t NumBytes = StackSize - X86FI->getCalleeSavedFrameSize();
 
-  // Skip over the debug labels which mark the beginning of the function.
-  if (MMI && MMI->needsFrameInfo()) {
-    unsigned NumLabels = 0;
-    while (NumLabels <= 1 &&
-           MBBI != MBB.end() && MBBI->isDebugLabel()) {
-      ++NumLabels;
-      ++MBBI;
-    }
-  }
-
   // Insert stack pointer adjustment for later moving of return addr.  Only
   // applies to tail call optimized functions where the callee argument stack
   // size is bigger than the callers.
