diff --git a/lib/CodeGen/AsmPrinter/DwarfException.cpp b/lib/CodeGen/AsmPrinter/DwarfException.cpp
index c44e7b6..a3c7705 100644
--- a/lib/CodeGen/AsmPrinter/DwarfException.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfException.cpp
@@ -49,8 +49,11 @@
   delete ExceptionTimer;
 }
 
-void DwarfException::EmitCommonEHFrame(const Function *Personality,
-                                       unsigned Index) {
+/// EmitCommonInformationEntry - Emit a Common Information Entry (CIE). This
+/// holds information that is shared among many Frame Description Entries.
+/// There is at least one CIE in every non-empty .debug_frame section.
+void DwarfException::EmitCommonInformationEntry(const Function *Personality,
+                                                unsigned Index) {
   // Size and sign of stack growth.
   int stackGrowth =
     Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
@@ -144,9 +147,10 @@
   Asm->EOL();
 }
 
-/// EmitEHFrame - Emit function exception frame information.
-///
-void DwarfException::EmitEHFrame(const FunctionEHFrameInfo &EHFrameInfo) {
+/// EmitFrameDescriptionEntry - Emit the Frame Description Entry (FDE) for the
+/// function.
+void DwarfException::
+EmitFrameDescriptionEntry(const FunctionEHFrameInfo &EHFrameInfo) {
   assert(!EHFrameInfo.function->hasAvailableExternallyLinkage() && 
          "Should not emit 'available externally' functions at all");
 
@@ -844,11 +848,11 @@
   if (shouldEmitMovesModule || shouldEmitTableModule) {
     const std::vector<Function *> Personalities = MMI->getPersonalities();
     for (unsigned i = 0; i < Personalities.size(); ++i)
-      EmitCommonEHFrame(Personalities[i], i);
+      EmitCommonInformationEntry(Personalities[i], i);
 
     for (std::vector<FunctionEHFrameInfo>::iterator I = EHFrames.begin(),
            E = EHFrames.end(); I != E; ++I)
-      EmitEHFrame(*I);
+      EmitFrameDescriptionEntry(*I);
   }
 
   if (TimePassesIsEnabled)
diff --git a/lib/CodeGen/AsmPrinter/DwarfException.h b/lib/CodeGen/AsmPrinter/DwarfException.h
index 5f4fda7..8a9d568 100644
--- a/lib/CodeGen/AsmPrinter/DwarfException.h
+++ b/lib/CodeGen/AsmPrinter/DwarfException.h
@@ -70,13 +70,14 @@
   /// ExceptionTimer - Timer for the Dwarf exception writer.
   Timer *ExceptionTimer;
 
-  /// EmitCommonEHFrame - Emit the common eh unwind frame.
-  ///
-  void EmitCommonEHFrame(const Function *Personality, unsigned Index);
+  /// EmitCommonInformationEntry - Emit a Common Information Entry (CIE). This
+  /// holds information that is shared among many Frame Description Entries.
+  /// There is at least one CIE in every non-empty .debug_frame section.
+  void EmitCommonInformationEntry(const Function *Personality, unsigned Index);
 
-  /// EmitEHFrame - Emit function exception frame information.
-  ///
-  void EmitEHFrame(const FunctionEHFrameInfo &EHFrameInfo);
+  /// EmitFrameDescriptionEntry - Emit the Frame Description Entry (FDE) for the
+  /// function.
+  void EmitFrameDescriptionEntry(const FunctionEHFrameInfo &EHFrameInfo);
 
   /// EmitExceptionTable - Emit landing pads and actions.
   ///
