diff --git a/include/llvm/CodeGen/DwarfWriter.h b/include/llvm/CodeGen/DwarfWriter.h
index 494400e..89874f8 100644
--- a/include/llvm/CodeGen/DwarfWriter.h
+++ b/include/llvm/CodeGen/DwarfWriter.h
@@ -68,8 +68,7 @@
   
   /// BeginModule - Emit all Dwarf sections that should come prior to the
   /// content.
-  void BeginModule(Module *M, MachineModuleInfo *MMI, raw_ostream &OS,
-                   AsmPrinter *A, const MCAsmInfo *T);
+  void BeginModule(Module *M, AsmPrinter *A);
   
   /// EndModule - Emit all Dwarf sections that should come after the content.
   ///
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 3252a42..dea96bd 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -137,7 +137,7 @@
 
   DW = getAnalysisIfAvailable<DwarfWriter>();
   if (DW)
-    DW->BeginModule(&M, MMI, O, this, MAI);
+    DW->BeginModule(&M, this);
 
   return false;
 }
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 9084456..07b35e2 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -298,8 +298,8 @@
 
 } // end llvm namespace
 
-DwarfDebug::DwarfDebug(raw_ostream &OS, AsmPrinter *A, const MCAsmInfo *T)
-  : DwarfPrinter(OS, A, T), ModuleCU(0),
+DwarfDebug::DwarfDebug(AsmPrinter *A)
+  : DwarfPrinter(A), ModuleCU(0),
     AbbreviationsSet(InitAbbreviationsSetSize), Abbreviations(),
     DIEBlocks(), SectionSourceLines(), didInitial(false), shouldEmit(false),
     CurrentFnDbgScope(0), DebugTimer(0) {
@@ -1780,7 +1780,7 @@
 /// beginModule - Emit all Dwarf sections that should come prior to the
 /// content. Create global DIEs and emit initial debug info sections.
 /// This is inovked by the target AsmPrinter.
-void DwarfDebug::beginModule(Module *M, MachineModuleInfo *mmi) {
+void DwarfDebug::beginModule(Module *M) {
   this->M = M;
 
   if (!MAI->doesSupportDebugInformation())
@@ -1809,7 +1809,7 @@
          E = DbgFinder.global_variable_end(); I != E; ++I)
     constructGlobalVariableDIE(*I);
 
-  MMI = mmi;
+  MMI = Asm->MMI;
   shouldEmit = true;
   MMI->setDebugInfoAvailability(true);
 
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h
index 03d9d99..5dabd8e 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.h
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h
@@ -487,8 +487,8 @@
 
   /// GetOrCreateSourceID - Look up the source id with the given directory and
   /// source file names. If none currently exists, create a new id and insert it
-  /// in the SourceIds map. This can update DirectoryNames and SourceFileNames maps
-  /// as well.
+  /// in the SourceIds map. This can update DirectoryNames and SourceFileNames
+  /// maps as well.
   unsigned GetOrCreateSourceID(StringRef DirName, StringRef FileName);
 
   void constructCompileUnit(MDNode *N);
@@ -507,7 +507,7 @@
   //===--------------------------------------------------------------------===//
   // Main entry points.
   //
-  DwarfDebug(raw_ostream &OS, AsmPrinter *A, const MCAsmInfo *T);
+  DwarfDebug(AsmPrinter *A);
   virtual ~DwarfDebug();
 
   /// ShouldEmitDwarfDebug - Returns true if Dwarf debugging declarations should
@@ -516,7 +516,7 @@
 
   /// beginModule - Emit all Dwarf sections that should come prior to the
   /// content.
-  void beginModule(Module *M, MachineModuleInfo *MMI);
+  void beginModule(Module *M);
 
   /// endModule - Emit all Dwarf sections that should come after the content.
   ///
diff --git a/lib/CodeGen/AsmPrinter/DwarfException.cpp b/lib/CodeGen/AsmPrinter/DwarfException.cpp
index 8b616b0..bf89cd6 100644
--- a/lib/CodeGen/AsmPrinter/DwarfException.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfException.cpp
@@ -37,9 +37,8 @@
 #include "llvm/ADT/Twine.h"
 using namespace llvm;
 
-DwarfException::DwarfException(raw_ostream &OS, AsmPrinter *A,
-                               const MCAsmInfo *T)
-  : DwarfPrinter(OS, A, T), shouldEmitTable(false),shouldEmitMoves(false),
+DwarfException::DwarfException(AsmPrinter *A)
+  : DwarfPrinter(A), shouldEmitTable(false), shouldEmitMoves(false),
     shouldEmitTableModule(false), shouldEmitMovesModule(false),
     ExceptionTimer(0) {
   if (TimePassesIsEnabled)
diff --git a/lib/CodeGen/AsmPrinter/DwarfException.h b/lib/CodeGen/AsmPrinter/DwarfException.h
index 4bc4a45..85bf581 100644
--- a/lib/CodeGen/AsmPrinter/DwarfException.h
+++ b/lib/CodeGen/AsmPrinter/DwarfException.h
@@ -166,14 +166,14 @@
   //===--------------------------------------------------------------------===//
   // Main entry points.
   //
-  DwarfException(raw_ostream &OS, AsmPrinter *A, const MCAsmInfo *T);
+  DwarfException(AsmPrinter *A);
   virtual ~DwarfException();
 
   /// BeginModule - Emit all exception information that should come prior to the
   /// content.
-  void BeginModule(Module *m, MachineModuleInfo *mmi) {
+  void BeginModule(Module *m) {
     this->M = m;
-    this->MMI = mmi;
+    this->MMI = Asm->MMI;
   }
 
   /// EndModule - Emit all exception information that should come after the
diff --git a/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp b/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
index 9de1788..4106c7a 100644
--- a/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp
@@ -31,8 +31,8 @@
 #include "llvm/ADT/SmallString.h"
 using namespace llvm;
 
-DwarfPrinter::DwarfPrinter(raw_ostream &OS, AsmPrinter *A, const MCAsmInfo *T)
-: O(OS), Asm(A), MAI(T), TD(Asm->TM.getTargetData()),
+DwarfPrinter::DwarfPrinter(AsmPrinter *A)
+: Asm(A), MAI(A->MAI), TD(Asm->TM.getTargetData()),
   RI(Asm->TM.getRegisterInfo()), M(NULL), MF(NULL), MMI(NULL),
   SubprogramCount(0) {}
 
@@ -139,8 +139,7 @@
     
   if (MAI->hasLEB128()) {
     // FIXME: MCize.
-    O << "\t.sleb128\t" << Value;
-    Asm->OutStreamer.AddBlankLine();
+    Asm->OutStreamer.EmitRawText("\t.sleb128\t" + Twine(Value));
     return;
   }
 
@@ -165,8 +164,7 @@
  
   if (MAI->hasLEB128() && PadTo == 0) {
     // FIXME: MCize.
-    O << "\t.uleb128\t" << Value;
-    Asm->OutStreamer.AddBlankLine();
+    Asm->OutStreamer.EmitRawText("\t.uleb128\t" + Twine(Value));
     return;
   }
   
diff --git a/lib/CodeGen/AsmPrinter/DwarfPrinter.h b/lib/CodeGen/AsmPrinter/DwarfPrinter.h
index 0b94645..04355e0 100644
--- a/lib/CodeGen/AsmPrinter/DwarfPrinter.h
+++ b/lib/CodeGen/AsmPrinter/DwarfPrinter.h
@@ -39,9 +39,6 @@
   // Core attributes used by the DWARF printer.
   //
 
-  /// O - Stream to .s file.
-  raw_ostream &O;
-
   /// Asm - Target of Dwarf emission.
   AsmPrinter *Asm;
 
@@ -66,7 +63,7 @@
   /// SubprogramCount - The running count of functions being compiled.
   unsigned SubprogramCount;
 
-  DwarfPrinter(raw_ostream &OS, AsmPrinter *A, const MCAsmInfo *T);
+  DwarfPrinter(AsmPrinter *A);
 public:
   
   //===------------------------------------------------------------------===//
diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
index a2d7ab1..7aa9281 100644
--- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
@@ -36,14 +36,11 @@
 
 /// BeginModule - Emit all Dwarf sections that should come prior to the
 /// content.
-void DwarfWriter::BeginModule(Module *M,
-                              MachineModuleInfo *MMI,
-                              raw_ostream &OS, AsmPrinter *A,
-                              const MCAsmInfo *T) {
-  DE = new DwarfException(OS, A, T);
-  DD = new DwarfDebug(OS, A, T);
-  DE->BeginModule(M, MMI);
-  DD->beginModule(M, MMI);
+void DwarfWriter::BeginModule(Module *M, AsmPrinter *A) {
+  DE = new DwarfException(A);
+  DD = new DwarfDebug(A);
+  DE->BeginModule(M);
+  DD->beginModule(M);
 }
 
 /// EndModule - Emit all Dwarf sections that should come after the content.
