diff --git a/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp b/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
index 8e4cf46..6deac9e 100644
--- a/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
@@ -58,19 +58,14 @@
   const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
   unsigned PerEncoding = TLOF.getPersonalityEncoding();
 
-  // Begin eh frame section.
-  Asm->OutStreamer.SwitchSection(TLOF.getEHFrameSection());
-
   if ((PerEncoding & 0x70) != dwarf::DW_EH_PE_pcrel)
     return;
 
   // Emit references to all used personality functions
   const std::vector<const Function*> &Personalities = MMI->getPersonalities();
   for (size_t i = 0, e = Personalities.size(); i != e; ++i) {
-    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("personality", i));
     const MCSymbol *Sym = Asm->Mang->getSymbol(Personalities[i]);
-    unsigned Size = Asm->TM.getTargetData()->getPointerSize();
-    Asm->OutStreamer.EmitSymbolValue(Sym, Size);
+    TLOF.emitPersonalityValue(Asm->OutStreamer, Asm->TM, Sym);
   }
 }
 
@@ -123,8 +118,8 @@
     break;
   }
   case dwarf::DW_EH_PE_pcrel: {
-    Sym = Asm->GetTempSymbol("personality",
-                             MMI->getPersonalityIndex());
+    MCContext &Context = Asm->OutStreamer.getContext();
+    Sym = TLOF.getPersonalityPICSymbol(Per->getName());
     break;
   }
   }
diff --git a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index f332d12..3e45cd8 100644
--- a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -23,6 +23,7 @@
 #include "llvm/MC/MCSectionMachO.h"
 #include "llvm/MC/MCSectionELF.h"
 #include "llvm/MC/MCSectionCOFF.h"
+#include "llvm/MC/MCStreamer.h"
 #include "llvm/MC/MCSymbol.h"
 #include "llvm/Target/Mangler.h"
 #include "llvm/Target/TargetData.h"
@@ -176,6 +177,38 @@
                                     SectionKind::getDataRel());
 }
 
+MCSymbol *
+TargetLoweringObjectFileELF::getPersonalityPICSymbol(StringRef Name) const {
+  Twine FullName = StringRef("DW.ref.") + Name;
+  return getContext().GetOrCreateSymbol(FullName);
+}
+
+void TargetLoweringObjectFileELF::emitPersonalityValue(MCStreamer &Streamer,
+                                                       const TargetMachine &TM,
+                                                   const MCSymbol *Sym) const {
+    MCSymbol *Label = getPersonalityPICSymbol(Sym->getName());
+    Streamer.EmitSymbolAttribute(Label, MCSA_Hidden);
+    Streamer.EmitSymbolAttribute(Label, MCSA_Weak);
+    Twine SectionName = StringRef(".data.") + Label->getName();
+    SmallString<64> NameData;
+    SectionName.toVector(NameData);
+    unsigned Flags = ELF::SHF_ALLOC | ELF::SHF_WRITE | ELF::SHF_GROUP;
+    const MCSection *Sec = getContext().getELFSection(NameData,
+                                                      ELF::SHT_PROGBITS,
+                                                      Flags,
+                                                      SectionKind::getDataRel(),
+                                                      0, Label->getName());
+    Streamer.SwitchSection(Sec);
+    Streamer.EmitValueToAlignment(8);
+    Streamer.EmitSymbolAttribute(Label, MCSA_ELF_TypeObject);
+    const MCExpr *E = MCConstantExpr::Create(8, getContext());
+    Streamer.EmitELFSize(Label, E);
+    Streamer.EmitLabel(Label);
+
+    unsigned Size = TM.getTargetData()->getPointerSize();
+    Streamer.EmitSymbolValue(Sym, Size);
+}
+
 static SectionKind
 getELFKindForNamedSection(StringRef Name, SectionKind K) {
   // FIXME: Why is this here? Codegen is should not be in the business
diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp
index 7eeec5d..643a56b 100644
--- a/lib/Target/TargetLoweringObjectFile.cpp
+++ b/lib/Target/TargetLoweringObjectFile.cpp
@@ -120,6 +120,18 @@
   return false;
 }
 
+MCSymbol *
+TargetLoweringObjectFile::getPersonalityPICSymbol(StringRef Name) const {
+  assert(0 && "Not Available in this format.");
+}
+
+void TargetLoweringObjectFile::emitPersonalityValue(MCStreamer &Streamer,
+                                                    const TargetMachine &TM,
+                                                    const MCSymbol *Sym) const {
+  assert(0 && "Not Available in this format.");
+}
+
+
 /// getKindForGlobal - This is a top-level target-independent classifier for
 /// a global variable.  Given an global variable and information from TM, it
 /// classifies the global in a variety of ways that make various target
