[cfe-commits] [PATCH] Bitrig - multiple changes

David Hill dhill at mindcry.org
Tue Oct 2 10:17:58 PDT 2012


Ping.

On Wed, Sep 26, 2012 at 10:10:59AM -0400, David Hill wrote:
>Ping.
>
>On Mon, Sep 24, 2012 at 02:42:38PM -0400, David Hill wrote:
>>Ping.
>>
>>On Sun, Sep 23, 2012 at 11:24:14AM -0400, David Hill wrote:
>>>Hello,
>>>
>>>The attached patch includes the following:
>>>
>>>- reorder linking of the libraries
>>>- support linking with pthread_p when -pg is used.
>>>- understand -stdlib= correctly
>>>- support --sysroot
>>>- add tests for LD and -pg
>>>
>>>Please review.  Thank you!
>>>
>>>David Hill
>>
>>>diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
>>>index 7e19551..4ce8dd3 100644
>>>--- a/lib/Driver/ToolChains.cpp
>>>+++ b/lib/Driver/ToolChains.cpp
>>>@@ -1625,19 +1625,42 @@ void Bitrig::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
>>>       DriverArgs.hasArg(options::OPT_nostdincxx))
>>>     return;
>>> 
>>>-  std::string Triple = getTriple().str();
>>>-  if (Triple.substr(0, 5) == "amd64")
>>>-    Triple.replace(0, 5, "x86_64");
>>>-
>>>-  addSystemInclude(DriverArgs, CC1Args, "/usr/include/c++/4.6.2");
>>>-  addSystemInclude(DriverArgs, CC1Args, "/usr/include/c++/4.6.2/backward");
>>>-  addSystemInclude(DriverArgs, CC1Args, "/usr/include/c++/4.6.2/" + Triple);
>>>+  CXXStdlibType Type = GetCXXStdlibType(DriverArgs);
>>>+  switch (Type) {
>>>+  case ToolChain::CST_Libcxx:
>>>+    addSystemInclude(DriverArgs, CC1Args,
>>>+                     getDriver().SysRoot + "/usr/include/c++/");
>>>+    break;
>>>+  case ToolChain::CST_Libstdcxx:
>>>+    std::string Triple = getTriple().str();
>>>+    if (Triple.substr(0, 5) == "amd64")
>>>+      Triple.replace(0, 5, "x86_64");
>>> 
>>>+    addSystemInclude(DriverArgs, CC1Args,
>>>+                     getDriver().SysRoot + "/usr/include/c++/stdc++");
>>>+    addSystemInclude(DriverArgs, CC1Args,
>>>+                     getDriver().SysRoot + "/usr/include/c++/stdc++/backward");
>>>+    addSystemInclude(DriverArgs, CC1Args,
>>>+                     getDriver().SysRoot + "/usr/include/c++/stdc++/" + Triple);
>>>+    break;
>>>+  }
>>> }
>>> 
>>> void Bitrig::AddCXXStdlibLibArgs(const ArgList &Args,
>>>                                  ArgStringList &CmdArgs) const {
>>>-  CmdArgs.push_back("-lstdc++");
>>>+  CXXStdlibType Type = GetCXXStdlibType(Args);
>>>+
>>>+  switch (Type) {
>>>+  case ToolChain::CST_Libcxx:
>>>+    CmdArgs.push_back("-lc++");
>>>+    CmdArgs.push_back("-lcxxrt");
>>>+    /* for now we borrow Unwind from supc++ */
>>>+    CmdArgs.push_back("-lgcc");
>>>+    break;
>>>+  case ToolChain::CST_Libstdcxx:
>>>+    CmdArgs.push_back("-lstdc++");
>>>+    break;
>>>+  }
>>> }
>>> 
>>> /// FreeBSD - FreeBSD tool chain which can call as(1) and ld(1) directly.
>>>diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
>>>index 0866c01..9aea69b 100644
>>>--- a/lib/Driver/Tools.cpp
>>>+++ b/lib/Driver/Tools.cpp
>>>@@ -5086,23 +5086,6 @@ void bitrig::Link::ConstructJob(Compilation &C, const JobAction &JA,
>>> 
>>>   if (!Args.hasArg(options::OPT_nostdlib) &&
>>>       !Args.hasArg(options::OPT_nodefaultlibs)) {
>>>-    if (D.CCCIsCXX) {
>>>-      getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs);
>>>-      if (Args.hasArg(options::OPT_pg))
>>>-        CmdArgs.push_back("-lm_p");
>>>-      else
>>>-        CmdArgs.push_back("-lm");
>>>-    }
>>>-
>>>-    if (Args.hasArg(options::OPT_pthread))
>>>-      CmdArgs.push_back("-lpthread");
>>>-    if (!Args.hasArg(options::OPT_shared)) {
>>>-      if (Args.hasArg(options::OPT_pg))
>>>-        CmdArgs.push_back("-lc_p");
>>>-      else
>>>-        CmdArgs.push_back("-lc");
>>>-    }
>>>-
>>>     std::string myarch = "-lclang_rt.";
>>>     const llvm::Triple &T = getToolChain().getTriple();
>>>     llvm::Triple::ArchType Arch = T.getArch();
>>>@@ -5119,7 +5102,31 @@ void bitrig::Link::ConstructJob(Compilation &C, const JobAction &JA,
>>>           default:
>>>             assert(0 && "Unsupported architecture");
>>>      }
>>>+
>>>      CmdArgs.push_back(Args.MakeArgString(myarch));
>>>+
>>>+     if (D.CCCIsCXX) {
>>>+       getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs);
>>>+       if (Args.hasArg(options::OPT_pg))
>>>+         CmdArgs.push_back("-lm_p");
>>>+       else
>>>+         CmdArgs.push_back("-lm");
>>>+     }
>>>+
>>>+     if (Args.hasArg(options::OPT_pthread)) {
>>>+       if (!Args.hasArg(options::OPT_shared) &&
>>>+           Args.hasArg(options::OPT_pg))
>>>+         CmdArgs.push_back("-lpthread_p");
>>>+      else
>>>+         CmdArgs.push_back("-lpthread");
>>>+     }
>>>+
>>>+     if (!Args.hasArg(options::OPT_shared)) {
>>>+       if (Args.hasArg(options::OPT_pg))
>>>+         CmdArgs.push_back("-lc_p");
>>>+       else
>>>+         CmdArgs.push_back("-lc");
>>>+     }
>>>   }
>>> 
>>>   if (!Args.hasArg(options::OPT_nostdlib) &&
>>>diff --git a/test/Driver/bitrig.c b/test/Driver/bitrig.c
>>>new file mode 100644
>>>index 0000000..412e79c
>>>--- /dev/null
>>>+++ b/test/Driver/bitrig.c
>>>@@ -0,0 +1,9 @@
>>>+// RUN: %clang -no-canonical-prefixes -ccc-clang-archs "" -target amd64-pc-bitrig %s -### 2>&1 \
>>>+// RUN:   | FileCheck --check-prefix=CHECK-LD %s
>>>+// CHECK-LD: clang{{.*}}" "-cc1" "-triple" "amd64-pc-bitrig"
>>>+// CHECK-LD: ld{{.*}}" "-e" "__start" "--eh-frame-hdr" "-Bdynamic" "-dynamic-linker" "{{.*}}ld.so" "-o" "a.out" "{{.*}}crt0.o" "{{.*}}crtbegin.o" "{{.*}}.o" "-lclang_rt.amd64" "-lc" "{{.*}}crtend.o"
>>>+
>>>+// RUN: %clang -no-canonical-prefixes -ccc-clang-archs "" -target amd64-pc-bitrig -pg -pthread %s -### 2>&1 \
>>>+// RUN:   | FileCheck --check-prefix=CHECK-PG %s
>>>+// CHECK-PG: clang{{.*}}" "-cc1" "-triple" "amd64-pc-bitrig"
>>>+// CHECK-PG: ld{{.*}}" "-e" "__start" "--eh-frame-hdr" "-Bdynamic" "-dynamic-linker" "{{.*}}ld.so" "-o" "a.out" "{{.*}}crt0.o" "{{.*}}crtbegin.o" "{{.*}}.o" "-lclang_rt.amd64" "-lpthread_p" "-lc_p" "{{.*}}crtend.o"
>>
>>>_______________________________________________
>>>cfe-commits mailing list
>>>cfe-commits at cs.uiuc.edu
>>>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>>_______________________________________________
>>cfe-commits mailing list
>>cfe-commits at cs.uiuc.edu
>>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>_______________________________________________
>cfe-commits mailing list
>cfe-commits at cs.uiuc.edu
>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list