make SectionForGlobal non-virtual, add a hook for pic16 to do its "address=" hack.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76989 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp
index 985f415..1ed9a71 100644
--- a/lib/Target/TargetAsmInfo.cpp
+++ b/lib/Target/TargetAsmInfo.cpp
@@ -263,10 +263,18 @@
 
 
 const Section *TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const {
-  // Select section name
+  SectionKind::Kind Kind = SectionKindForGlobal(GV);
+
+  // Select section name.
   if (GV->hasSection()) {
+    
+    // If the target has special section hacks for specifically named globals,
+    // return them now.
+    if (const Section *TS = getSpecialCasedSectionGlobals(GV, Kind))
+      return TS;
+    
     // Honour section already set, if any.
-    unsigned Flags = SectionFlagsForGlobal(GV, SectionKindForGlobal(GV));
+    unsigned Flags = SectionFlagsForGlobal(GV, Kind);
 
     // This is an explicitly named section.
     Flags |= SectionFlags::Named;
@@ -282,9 +290,8 @@
   // If this global is linkonce/weak and the target handles this by emitting it
   // into a 'uniqued' section name, create and return the section now.
   if (GV->isWeakForLinker()) {
-    if (const char *Prefix =
-          getSectionPrefixForUniqueGlobal(SectionKindForGlobal(GV))) {
-      unsigned Flags = SectionFlagsForGlobal(GV, SectionKindForGlobal(GV));
+    if (const char *Prefix = getSectionPrefixForUniqueGlobal(Kind)) {
+      unsigned Flags = SectionFlagsForGlobal(GV, Kind);
 
       // FIXME: Use mangler interface (PR4584).
       std::string Name = Prefix+GV->getNameStr();