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

Nico Weber thakis at chromium.org
Tue Oct 2 22:29:27 PDT 2012


It looks like this only touches bitrig-related code, which was added
by you originally. So lgtm.

On Wed, Oct 3, 2012 at 2:17 AM, David Hill <dhill at mindcry.org> wrote:
> 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
> _______________________________________________
> 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