[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