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

David Hill dhill at mindcry.org
Wed Sep 26 07:10:59 PDT 2012


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



More information about the cfe-commits mailing list