Add Target hooks for IRgen of [cf]string literals.
 - Notably, set section on cfstring literal string data (for now, this
   is done everywhere because it matches what we were already doing
   for the CFString data itself)

 - <rdar://problem/6599098> [irgen] linker requires objc string data
   to go into cstring


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68160 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index b3224fe..ce55ec8 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -653,11 +653,21 @@
                         "i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-"
                         "a0:0:64-f80:128:128";
   }
+
+  virtual const char *getStringSymbolPrefix(bool IsConstant) const { 
+    return IsConstant ? "\01LC" : "\01lC";
+  }
+
+  virtual const char *getCFStringSymbolPrefix() const { 
+    return "\01LC";
+  }
+
   virtual void getTargetDefines(const LangOptions &Opts,
                                 std::vector<char> &Defines) const {
     X86_32TargetInfo::getTargetDefines(Opts, Defines);
     getDarwinDefines(Defines, getTargetTriple());
   }
+
   /// getDefaultLangOptions - Allow the target to specify default settings for
   /// various language options.  These may be overridden by command line
   /// options. 
@@ -796,6 +806,14 @@
   DarwinX86_64TargetInfo(const std::string& triple) :
     X86_64TargetInfo(triple) {}
 
+  virtual const char *getStringSymbolPrefix(bool IsConstant) const { 
+    return IsConstant ? "\01LC" : "\01lC";
+  }
+
+  virtual const char *getCFStringSymbolPrefix() const { 
+    return "\01L_unnamed_cfstring_";
+  }
+
   virtual void getTargetDefines(const LangOptions &Opts,
                                 std::vector<char> &Defines) const {
     X86_64TargetInfo::getTargetDefines(Opts, Defines);