Add support to the mangler for targets which require _'s on global symbols


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7741 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Support/Mangler.cpp b/lib/Support/Mangler.cpp
index 665cb73..a58ca33 100644
--- a/lib/Support/Mangler.cpp
+++ b/lib/Support/Mangler.cpp
@@ -42,8 +42,9 @@
     //   2) V's name would collide if it is not mangled.
     //
     const GlobalValue* gv = dyn_cast<GlobalValue>(V);
-    if(gv && !gv->hasInternalLinkage() && !MangledGlobals.count(gv)) {
+    if (gv && !gv->hasInternalLinkage() && !MangledGlobals.count(gv)) {
       name = makeNameProper(gv->getName());
+      if (AddUnderscorePrefix) name = "_" + name;
     } else {
       // Non-global, or global with internal linkage / colliding name
       // -> mangle.
@@ -54,12 +55,13 @@
     name = "ltmp_" + utostr(Count++) + "_"
       + utostr(V->getType()->getUniqueID());
   }
+  
   Memo[V] = name;
   return name;
 }
 
-Mangler::Mangler(Module &M_) : M(M_)
-{
+Mangler::Mangler(Module &m, bool addUnderscorePrefix)
+  : M(m), AddUnderscorePrefix(addUnderscorePrefix) {
   // Calculate which global values have names that will collide when we throw
   // away type information.
   std::set<std::string> FoundNames;