diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index c83a0da..4a85c84 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -1719,13 +1719,14 @@
   return OutContext.GetOrCreateSymbol(NameStr.str());
 }
 
-/// GetPrivateGlobalValueSymbolStub - Return the MCSymbol for a symbol with
+/// GetSymbolWithGlobalValueBase - Return the MCSymbol for a symbol with
 /// global value name as its base, with the specified suffix, and where the
-/// symbol is forced to have private linkage.
-MCSymbol *AsmPrinter::GetPrivateGlobalValueSymbolStub(const GlobalValue *GV,
-                                                      StringRef Suffix) const {
+/// symbol is forced to have private linkage if ForcePrivate is true.
+MCSymbol *AsmPrinter::GetSymbolWithGlobalValueBase(const GlobalValue *GV,
+                                                   StringRef Suffix,
+                                                   bool ForcePrivate) const {
   SmallString<60> NameStr;
-  Mang->getNameWithPrefix(NameStr, GV, true);
+  Mang->getNameWithPrefix(NameStr, GV, ForcePrivate);
   NameStr.append(Suffix.begin(), Suffix.end());
   return OutContext.GetOrCreateSymbol(NameStr.str());
 }
diff --git a/lib/CodeGen/AsmPrinter/DwarfException.cpp b/lib/CodeGen/AsmPrinter/DwarfException.cpp
index c1d3f49..31f6a38 100644
--- a/lib/CodeGen/AsmPrinter/DwarfException.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfException.cpp
@@ -22,6 +22,7 @@
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCSection.h"
 #include "llvm/MC/MCStreamer.h"
+#include "llvm/MC/MCSymbol.h"
 #include "llvm/Target/TargetData.h"
 #include "llvm/Target/TargetFrameInfo.h"
 #include "llvm/Target/TargetLoweringObjectFile.h"
@@ -230,17 +231,26 @@
   // Externally visible entry into the functions eh frame info. If the
   // corresponding function is static, this should not be externally visible.
   if (!TheFunc->hasLocalLinkage())
-    if (const char *GlobalEHDirective = MAI->getGlobalEHDirective())
-      O << GlobalEHDirective << EHFrameInfo.FnName << '\n';
+    if (const char *GlobalEHDirective = MAI->getGlobalEHDirective()) {
+      O << GlobalEHDirective;
+      EHFrameInfo.FunctionEHSym->print(O, MAI);
+      O << '\n';
+    }
 
   // If corresponding function is weak definition, this should be too.
-  if (TheFunc->isWeakForLinker() && MAI->getWeakDefDirective())
-    O << MAI->getWeakDefDirective() << EHFrameInfo.FnName << '\n';
+  if (TheFunc->isWeakForLinker() && MAI->getWeakDefDirective()) {
+    O << MAI->getWeakDefDirective();
+    EHFrameInfo.FunctionEHSym->print(O, MAI);
+    O << '\n';
+  }
 
   // If corresponding function is hidden, this should be too.
   if (TheFunc->hasHiddenVisibility())
-    if (const char *HiddenDirective = MAI->getHiddenDirective())
-      O << HiddenDirective << EHFrameInfo.FnName << '\n' ;
+    if (const char *HiddenDirective = MAI->getHiddenDirective()) {
+      O << HiddenDirective;
+      EHFrameInfo.FunctionEHSym->print(O, MAI);
+      O << '\n';
+    }
 
   // If there are no calls then you can't unwind.  This may mean we can omit the
   // EH Frame, but some environments do not handle weak absolute symbols. If
@@ -250,14 +260,19 @@
       (!TheFunc->isWeakForLinker() ||
        !MAI->getWeakDefDirective() ||
        MAI->getSupportsWeakOmittedEHFrame())) {
-    O << EHFrameInfo.FnName << " = 0\n";
+    EHFrameInfo.FunctionEHSym->print(O, MAI);
+    O << " = 0\n";
     // This name has no connection to the function, so it might get
     // dead-stripped when the function is not, erroneously.  Prohibit
     // dead-stripping unconditionally.
-    if (const char *UsedDirective = MAI->getUsedDirective())
-      O << UsedDirective << EHFrameInfo.FnName << "\n\n";
+    if (const char *UsedDirective = MAI->getUsedDirective()) {
+      O << UsedDirective;
+      EHFrameInfo.FunctionEHSym->print(O, MAI);
+      O << "\n\n";
+    }
   } else {
-    O << EHFrameInfo.FnName << ":\n";
+    EHFrameInfo.FunctionEHSym->print(O, MAI);
+    O << ":\n";
 
     // EH frame header.
     EmitDifference("eh_frame_end", EHFrameInfo.Number,
@@ -328,8 +343,11 @@
     // on unused functions (calling undefined externals) being dead-stripped to
     // link correctly.  Yes, there really is.
     if (MMI->isUsedFunction(EHFrameInfo.function))
-      if (const char *UsedDirective = MAI->getUsedDirective())
-        O << UsedDirective << EHFrameInfo.FnName << "\n\n";
+      if (const char *UsedDirective = MAI->getUsedDirective()) {
+        O << UsedDirective;
+        EHFrameInfo.FunctionEHSym->print(O, MAI);
+        O << "\n\n";
+      }
   }
 
   Asm->EOL();
@@ -928,7 +946,7 @@
     PrintRelDirective();
 
     if (GV) {
-      O << Asm->Mang->getMangledName(GV);
+      Asm->GetGlobalValueSymbol(GV)->print(O, MAI);
     } else {
       O << "0x0";
     }
@@ -1019,12 +1037,12 @@
   EmitLabel("eh_func_end", SubprogramCount);
   EmitExceptionTable();
 
-  std::string FunctionEHName =
-    Asm->Mang->getMangledName(MF->getFunction(), ".eh",
-                              Asm->MAI->is_EHSymbolPrivate());
+  const MCSymbol *FunctionEHSym =
+    Asm->GetSymbolWithGlobalValueBase(MF->getFunction(), ".eh",
+                                      Asm->MAI->is_EHSymbolPrivate());
   
   // Save EH frame information
-  EHFrames.push_back(FunctionEHFrameInfo(FunctionEHName, SubprogramCount,
+  EHFrames.push_back(FunctionEHFrameInfo(FunctionEHSym, SubprogramCount,
                                          MMI->getPersonalityIndex(),
                                          MF->getFrameInfo()->hasCalls(),
                                          !MMI->getLandingPads().empty(),
diff --git a/lib/CodeGen/AsmPrinter/DwarfException.h b/lib/CodeGen/AsmPrinter/DwarfException.h
index aa01c5b..c674fe5 100644
--- a/lib/CodeGen/AsmPrinter/DwarfException.h
+++ b/lib/CodeGen/AsmPrinter/DwarfException.h
@@ -34,19 +34,19 @@
 ///
 class DwarfException : public Dwarf {
   struct FunctionEHFrameInfo {
-    std::string FnName;
+    const MCSymbol *FunctionEHSym;  // L_foo.eh
     unsigned Number;
     unsigned PersonalityIndex;
     bool hasCalls;
     bool hasLandingPads;
     std::vector<MachineMove> Moves;
-    const Function * function;
+    const Function *function;
 
-    FunctionEHFrameInfo(const std::string &FN, unsigned Num, unsigned P,
+    FunctionEHFrameInfo(const MCSymbol *EHSym, unsigned Num, unsigned P,
                         bool hC, bool hL,
                         const std::vector<MachineMove> &M,
                         const Function *f):
-      FnName(FN), Number(Num), PersonalityIndex(P),
+      FunctionEHSym(EHSym), Number(Num), PersonalityIndex(P),
       hasCalls(hC), hasLandingPads(hL), Moves(M), function (f) { }
   };
 
diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
index e5b4744..300d2ed 100644
--- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
+++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
@@ -190,7 +190,7 @@
           GetGlobalValueSymbol(GV)->print(O, MAI);
         else {
           // FIXME: Remove this when Darwin transition to @GOT like syntax.
-          MCSymbol *Sym = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr");
+          MCSymbol *Sym = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr");
           Sym->print(O, MAI);
           
           MachineModuleInfoMachO &MMIMachO =
diff --git a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
index f672356..6e3b54e 100644
--- a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
+++ b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
@@ -341,7 +341,7 @@
       GlobalValue *GV = MO.getGlobal();
       if (((GV->isDeclaration() || GV->hasWeakLinkage() ||
             GV->hasLinkOnceLinkage() || GV->hasCommonLinkage()))) {
-        GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr")->print(O, MAI);
+        GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr")->print(O, MAI);
         return;
       }
     }
diff --git a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
index ef171dd..311ca85 100644
--- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
+++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
@@ -70,9 +70,9 @@
         if (Stub != 0) return;
 
         // Get the names.
-        Stub = Printer->GetPrivateGlobalValueSymbolStub(GV, "$stub");
-        LazyPtr = Printer->GetPrivateGlobalValueSymbolStub(GV, "$lazy_ptr");
-        AnonSymbol = Printer->GetPrivateGlobalValueSymbolStub(GV, "$stub$tmp");
+        Stub = Printer->GetSymbolWithGlobalValueBase(GV, "$stub");
+        LazyPtr = Printer->GetSymbolWithGlobalValueBase(GV, "$lazy_ptr");
+        AnonSymbol = Printer->GetSymbolWithGlobalValueBase(GV, "$stub$tmp");
       }
 
       void Init(StringRef GVName, Mangler *Mang, MCContext &Ctx) {
@@ -450,11 +450,11 @@
     if (TM.getRelocationModel() != Reloc::Static &&
         (GV->isDeclaration() || GV->isWeakForLinker())) {
       if (!GV->hasHiddenVisibility()) {
-        SymToPrint = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr");
+        SymToPrint = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr");
         GVStubs[GetGlobalValueSymbol(GV)] = SymToPrint;
       } else if (GV->isDeclaration() || GV->hasCommonLinkage() ||
                  GV->hasAvailableExternallyLinkage()) {
-        SymToPrint = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr");
+        SymToPrint = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr");
         HiddenGVStubs[GetGlobalValueSymbol(GV)] = SymToPrint;
       } else {
         SymToPrint = GetGlobalValueSymbol(GV);
@@ -1200,7 +1200,7 @@
          E = Personalities.end(); I != E; ++I) {
       if (*I)
         GVStubs[GetGlobalValueSymbol(*I)] =
-          GetPrivateGlobalValueSymbolStub(*I, "$non_lazy_ptr");
+          GetSymbolWithGlobalValueBase(*I, "$non_lazy_ptr");
     }
   }
 
diff --git a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
index d3d4d13..dbb7279 100644
--- a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
+++ b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
@@ -238,11 +238,11 @@
     
     const MCSymbol *GVSym;
     if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB)
-      GVSym = GetPrivateGlobalValueSymbolStub(GV, "$stub");
+      GVSym = GetSymbolWithGlobalValueBase(GV, "$stub");
     else if (MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY ||
              MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY_PIC_BASE ||
              MO.getTargetFlags() == X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE)
-      GVSym = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr");
+      GVSym = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr");
     else
       GVSym = GetGlobalValueSymbol(GV);
 
@@ -258,7 +258,7 @@
     
     if (MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY ||
         MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY_PIC_BASE) {
-      MCSymbol *Sym = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr");
+      MCSymbol *Sym = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr");
       
       const MCSymbol *&StubSym = 
         MMI->getObjFileInfo<MachineModuleInfoMachO>().getGVStubEntry(Sym);
@@ -266,13 +266,13 @@
         StubSym = GetGlobalValueSymbol(GV);
       
     } else if (MO.getTargetFlags() == X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE){
-      MCSymbol *Sym = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr");
+      MCSymbol *Sym = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr");
       const MCSymbol *&StubSym =
         MMI->getObjFileInfo<MachineModuleInfoMachO>().getHiddenGVStubEntry(Sym);
       if (StubSym == 0)
         StubSym = GetGlobalValueSymbol(GV);
     } else if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) {
-      MCSymbol *Sym = GetPrivateGlobalValueSymbolStub(GV, "$stub");
+      MCSymbol *Sym = GetSymbolWithGlobalValueBase(GV, "$stub");
       const MCSymbol *&StubSym =
         MMI->getObjFileInfo<MachineModuleInfoMachO>().getFnStubEntry(Sym);
       if (StubSym == 0)
