Lift AddLinkRuntimeLibArgs into Darwin tool chain.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82212 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index ce4fc1e..5db58c1 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -154,6 +154,52 @@
                                        "/../../.."));
 }
 
+void Darwin::AddLinkRuntimeLibArgs(const ArgList &Args,
+                                   ArgStringList &CmdArgs) const {
+  unsigned MacosxVersionMin[3];
+  getMacosxVersionMin(Args, MacosxVersionMin);
+
+  // Derived from libgcc and lib specs but refactored.
+  if (Args.hasArg(options::OPT_static)) {
+    CmdArgs.push_back("-lgcc_static");
+  } else {
+    if (Args.hasArg(options::OPT_static_libgcc)) {
+      CmdArgs.push_back("-lgcc_eh");
+    } else if (Args.hasArg(options::OPT_miphoneos_version_min_EQ)) {
+      // Derived from darwin_iphoneos_libgcc spec.
+      if (isIPhone()) {
+        CmdArgs.push_back("-lgcc_s.1");
+      } else {
+        CmdArgs.push_back("-lgcc_s.10.5");
+      }
+    } else if (Args.hasArg(options::OPT_shared_libgcc) ||
+               // FIXME: -fexceptions -fno-exceptions means no exceptions
+               Args.hasArg(options::OPT_fexceptions) ||
+               Args.hasArg(options::OPT_fgnu_runtime)) {
+      // FIXME: This is probably broken on 10.3?
+      if (isMacosxVersionLT(MacosxVersionMin, 10, 5))
+        CmdArgs.push_back("-lgcc_s.10.4");
+      else if (isMacosxVersionLT(MacosxVersionMin, 10, 6))
+        CmdArgs.push_back("-lgcc_s.10.5");
+    } else {
+      if (isMacosxVersionLT(MacosxVersionMin, 10, 3, 9))
+        ; // Do nothing.
+      else if (isMacosxVersionLT(MacosxVersionMin, 10, 5))
+        CmdArgs.push_back("-lgcc_s.10.4");
+      else if (isMacosxVersionLT(MacosxVersionMin, 10, 6))
+        CmdArgs.push_back("-lgcc_s.10.5");
+    }
+
+    if (isIPhone() || isMacosxVersionLT(MacosxVersionMin, 10, 6)) {
+      CmdArgs.push_back("-lgcc");
+      CmdArgs.push_back("-lSystem");
+    } else {
+      CmdArgs.push_back("-lSystem");
+      CmdArgs.push_back("-lgcc");
+    }
+  }
+}
+
 void Darwin::getMacosxVersionMin(const ArgList &Args,
                                  unsigned (&Res)[3]) const {
   if (Arg *A = Args.getLastArg(options::OPT_mmacosx_version_min_EQ)) {
diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h
index 845be6a..91e5750 100644
--- a/lib/Driver/ToolChains.h
+++ b/lib/Driver/ToolChains.h
@@ -124,6 +124,10 @@
   /// (prefixed by -L) to.
   void AddLinkSearchPathArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
 
+  /// AddLinkRuntimeLibArgs - Add the linker arguments to link the compiler
+  /// runtime library.
+  void AddLinkRuntimeLibArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
+
   bool isIPhone() const { return IsIPhone; }
 
   /// }
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index f1535d8..6605317 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -2020,49 +2020,8 @@
 
     // link_ssp spec is empty.
 
-    // Derived from libgcc and lib specs but refactored.
-    if (Args.hasArg(options::OPT_static)) {
-      CmdArgs.push_back("-lgcc_static");
-    } else {
-      if (Args.hasArg(options::OPT_static_libgcc)) {
-        CmdArgs.push_back("-lgcc_eh");
-      } else if (Args.hasArg(options::OPT_miphoneos_version_min_EQ)) {
-        // Derived from darwin_iphoneos_libgcc spec.
-        if (getDarwinToolChain().isIPhone()) {
-          CmdArgs.push_back("-lgcc_s.1");
-        } else {
-          CmdArgs.push_back("-lgcc_s.10.5");
-        }
-      } else if (Args.hasArg(options::OPT_shared_libgcc) ||
-                 // FIXME: -fexceptions -fno-exceptions means no exceptions
-                 Args.hasArg(options::OPT_fexceptions) ||
-                 Args.hasArg(options::OPT_fgnu_runtime)) {
-        // FIXME: This is probably broken on 10.3?
-        if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin, 10, 5))
-          CmdArgs.push_back("-lgcc_s.10.4");
-        else if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin,
-                                                        10, 6))
-          CmdArgs.push_back("-lgcc_s.10.5");
-      } else {
-        if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin, 10, 3, 9))
-          ; // Do nothing.
-        else if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin,
-                                                        10, 5))
-          CmdArgs.push_back("-lgcc_s.10.4");
-        else if (getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin,
-                                                        10, 6))
-          CmdArgs.push_back("-lgcc_s.10.5");
-      }
-
-      if (getDarwinToolChain().isIPhone() ||
-          getDarwinToolChain().isMacosxVersionLT(MacosxVersionMin, 10, 6)) {
-        CmdArgs.push_back("-lgcc");
-        CmdArgs.push_back("-lSystem");
-      } else {
-        CmdArgs.push_back("-lSystem");
-        CmdArgs.push_back("-lgcc");
-      }
-    }
+    // Let the tool chain choose which runtime library to link.
+    getDarwinToolChain().AddLinkRuntimeLibArgs(Args, CmdArgs);
   }
 
   if (!Args.hasArg(options::OPT_A) &&