move ExtWeakSymbols to AsmPrinter

llvm-svn: 32648
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index c30c593..291073e 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -62,8 +62,6 @@
       : AsmPrinter(O, TM, T) {
     }
 
-    std::set<std::string> ExtWeakSymbols;
-
     /// We name each basic block in a Function with a unique number, so
     /// that we can consistently refer to them later. This is cleared
     /// at the beginning of each call to runOnMachineFunction().
@@ -246,7 +244,7 @@
     std::string Name = Mang->getValueName(GV);
     O << Name;
     if (GV->hasExternalWeakLinkage()) {
-      ExtWeakSymbols.insert(Name);
+      ExtWeakSymbols.insert(GV);
     }
   }
     break;
@@ -337,13 +335,6 @@
     }
   }
 
-  if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
-    SwitchToDataSection("");
-  for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
-         e = ExtWeakSymbols.end(); i != e; ++i) {
-    O << TAI->getWeakRefDirective() << *i << "\n";
-  }
-
   AsmPrinter::doFinalization(M);
   return false; // success
 }
diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
index 0659f03..1ffd652 100644
--- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
+++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
@@ -50,9 +50,6 @@
   struct VISIBILITY_HIDDEN PPCAsmPrinter : public AsmPrinter {
     std::set<std::string> FnStubs, GVStubs;
     const PPCSubtarget &Subtarget;
-    
-    // Necessary for external weak linkage support
-    std::set<std::string> ExtWeakSymbols;
 
     PPCAsmPrinter(std::ostream &O, TargetMachine &TM, const TargetAsmInfo *T)
       : AsmPrinter(O, TM, T), Subtarget(TM.getSubtarget<PPCSubtarget>()) {
@@ -162,7 +159,7 @@
             FnStubs.insert(Name);
             O << "L" << Name << "$stub";
             if (GV->hasExternalWeakLinkage())
-              ExtWeakSymbols.insert(Name);
+              ExtWeakSymbols.insert(GV);
             return;
           }
         }
@@ -337,7 +334,7 @@
     O << Name;
     
     if (GV->hasExternalWeakLinkage())
-      ExtWeakSymbols.insert(Name);
+      ExtWeakSymbols.insert(GV);
     return;
   }
 
@@ -658,22 +655,13 @@
       // reference!
       if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
         if (GV->hasExternalWeakLinkage())
-          ExtWeakSymbols.insert(Mang->getValueName(GV));
+          ExtWeakSymbols.insert(GV);
 
       EmitGlobalConstant(C);
       O << '\n';
     }
   }
 
-  if (TAI->getWeakRefDirective()) {
-    if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
-      SwitchToDataSection("");
-    for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
-         e = ExtWeakSymbols.end(); i != e; ++i) {
-      O << TAI->getWeakRefDirective() << *i << "\n";
-    }
-  }
-
   bool isPPC64 = TD->getPointerSizeInBits() == 64;
 
   // Output stubs for dynamically-linked functions
diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
index 62f24db..f9645b8 100755
--- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
+++ b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
@@ -257,7 +257,7 @@
     }
 
     if (GV->hasExternalWeakLinkage())
-      ExtWeakSymbols.insert(Name);
+      ExtWeakSymbols.insert(GV);
     
     int Offset = MO.getOffset();
     if (Offset > 0)
diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp
index 021e55c..578e1aa 100644
--- a/llvm/lib/Target/X86/X86AsmPrinter.cpp
+++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp
@@ -250,7 +250,7 @@
       // reference!
       if (const GlobalValue *GV = dyn_cast<GlobalValue>(C))
         if (GV->hasExternalWeakLinkage())
-          ExtWeakSymbols.insert(Mang->getValueName(GV));
+          ExtWeakSymbols.insert(GV);
 
       EmitGlobalConstant(C);
       O << '\n';
@@ -278,15 +278,6 @@
     O << "\t.ascii \" -export:" << *i << "\"\n";
   }    
 
-  if (TAI->getWeakRefDirective()) {
-    if (ExtWeakSymbols.begin() != ExtWeakSymbols.end())
-      SwitchToDataSection("");
-    for (std::set<std::string>::iterator i = ExtWeakSymbols.begin(),
-         e = ExtWeakSymbols.end(); i != e; ++i) {
-      O << TAI->getWeakRefDirective() << *i << "\n";
-    }
-  }
-  
   if (Subtarget->isTargetDarwin()) {
     SwitchToDataSection("");
 
diff --git a/llvm/lib/Target/X86/X86AsmPrinter.h b/llvm/lib/Target/X86/X86AsmPrinter.h
index b9b643b..af182fa 100755
--- a/llvm/lib/Target/X86/X86AsmPrinter.h
+++ b/llvm/lib/Target/X86/X86AsmPrinter.h
@@ -86,9 +86,6 @@
   // Necessary for dllexport support
   std::set<std::string> DLLExportedFns, DLLExportedGVs;
 
-  // Necessary for external weak linkage support
-  std::set<std::string> ExtWeakSymbols;
-  
   inline static bool isScale(const MachineOperand &MO) {
     return MO.isImmediate() &&
           (MO.getImmedValue() == 1 || MO.getImmedValue() == 2 ||