summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNAKAMURA Takumi <geek4civic@gmail.com>2014-06-29 16:00:11 +0000
committerNAKAMURA Takumi <geek4civic@gmail.com>2014-06-29 16:00:11 +0000
commit557fb62e800631fe93137c42530a164cfebfab7c (patch)
treea58a8cc5c356d91fa33199180d5337a4487af533
parent6189422f08aeef2ac0958cd9533b8d6bc4352d7e (diff)
downloadbcm5719-llvm-557fb62e800631fe93137c42530a164cfebfab7c.tar.gz
bcm5719-llvm-557fb62e800631fe93137c42530a164cfebfab7c.zip
Revert r211866, r211895 and r211995, "Driver: use GNU::Link for the Generic_GCC toolchain". It broke users of Generic_GCC, cygwin and mingw32.
It reverts commits as follows: r211866: "Driver: use GNU::Link for the Generic_GCC toolchain" r211895: "Replace GetProgramPath("ld") with GetLinkerPath()." r211995: "Driver: add a cygwin linker tool" llvm-svn: 211998
-rw-r--r--clang/include/clang/Driver/Options.td1
-rw-r--r--clang/lib/Driver/Driver.cpp3
-rw-r--r--clang/lib/Driver/ToolChains.cpp13
-rw-r--r--clang/lib/Driver/ToolChains.h8
-rw-r--r--clang/lib/Driver/Tools.cpp205
-rw-r--r--clang/lib/Driver/Tools.h18
-rw-r--r--clang/test/Driver/bindings.c2
-rw-r--r--clang/test/Driver/cygwin-link.c48
-rw-r--r--clang/test/Driver/gcc_forward.c6
9 files changed, 21 insertions, 283 deletions
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index f43c4df06f8..95f13cc3845 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1019,7 +1019,6 @@ def masm_EQ : Joined<["-"], "masm=">, Group<m_Group>, Flags<[DriverOption]>;
def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>;
def mconstant_cfstrings : Flag<["-"], "mconstant-cfstrings">, Group<clang_ignored_m_Group>;
def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>;
-def mdll : Joined<["-"], "mdll">, Group<m_Group>, Flags<[DriverOption]>;
def mdynamic_no_pic : Joined<["-"], "mdynamic-no-pic">, Group<m_Group>;
def mfix_and_continue : Flag<["-"], "mfix-and-continue">, Group<clang_ignored_m_Group>;
def mieee_fp : Flag<["-"], "mieee-fp">, Group<clang_ignored_m_Group>;
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 7ef19ce60fa..a18312a84fa 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -2023,9 +2023,6 @@ const ToolChain &Driver::getToolChain(const ArgList &Args,
else
TC = new toolchains::Generic_GCC(*this, Target, Args);
break;
- case llvm::Triple::Cygnus:
- TC = new toolchains::Cygwin(*this, Target, Args);
- break;
case llvm::Triple::MSVC:
case llvm::Triple::UnknownEnvironment:
TC = new toolchains::Windows(*this, Target, Args);
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index 4efc9a10782..d02c84d315b 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -2102,7 +2102,7 @@ Tool *Generic_GCC::buildAssembler() const {
}
Tool *Generic_GCC::buildLinker() const {
- return new tools::gnutools::Link(*this);
+ return new tools::gcc::Link(*this);
}
void Generic_GCC::printVerboseInfo(raw_ostream &OS) const {
@@ -3476,17 +3476,6 @@ Tool *DragonFly::buildLinker() const {
return new tools::dragonfly::Link(*this);
}
-/// Cygwin toolchain
-Cygwin::Cygwin(const Driver &D, const llvm::Triple &Triple,
- const llvm::opt::ArgList &Args)
- : Generic_GCC(D, Triple, Args) {
- ToolChain::path_list &LibPaths = getFilePaths();
- LibPaths.push_back("/usr/lib");
-}
-
-Tool *Cygwin::buildLinker() const {
- return new tools::cygwin::Link(*this);
-}
/// XCore tool chain
XCore::XCore(const Driver &D, const llvm::Triple &Triple,
diff --git a/clang/lib/Driver/ToolChains.h b/clang/lib/Driver/ToolChains.h
index 66d7eef53ad..8931aec7899 100644
--- a/clang/lib/Driver/ToolChains.h
+++ b/clang/lib/Driver/ToolChains.h
@@ -744,14 +744,6 @@ protected:
Tool *buildAssembler() const override;
};
-class LLVM_LIBRARY_VISIBILITY Cygwin : public Generic_GCC {
-public:
- Cygwin(const Driver &D, const llvm::Triple &Triple,
- const llvm::opt::ArgList &Args);
-
-protected:
- Tool *buildLinker() const override;
-};
class LLVM_LIBRARY_VISIBILITY XCore : public ToolChain {
public:
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 24d4bf90a9b..2955489b1e3 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -7060,13 +7060,11 @@ void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA,
const InputInfoList &Inputs,
const ArgList &Args,
const char *LinkingOutput) const {
- const toolchains::Linux& LinuxToolChain =
+ const toolchains::Linux& ToolChain =
static_cast<const toolchains::Linux&>(getToolChain());
- const auto &ToolChain = getToolChain();
const Driver &D = ToolChain.getDriver();
- const llvm::Triple &TT = ToolChain.getTriple();
- const bool isAndroid = TT.getEnvironment() == llvm::Triple::Android;
- const bool IsLinux = TT.isOSLinux();
+ const bool isAndroid =
+ ToolChain.getTriple().getEnvironment() == llvm::Triple::Android;
const bool IsPIE =
!Args.hasArg(options::OPT_shared) &&
!Args.hasArg(options::OPT_static) &&
@@ -7098,9 +7096,8 @@ void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA,
if (Args.hasArg(options::OPT_s))
CmdArgs.push_back("-s");
- if (IsLinux)
- for (const auto &Opt : LinuxToolChain.ExtraOpts)
- CmdArgs.push_back(Opt.c_str());
+ for (const auto &Opt : ToolChain.ExtraOpts)
+ CmdArgs.push_back(Opt.c_str());
if (!Args.hasArg(options::OPT_static)) {
CmdArgs.push_back("--eh-frame-hdr");
@@ -7167,17 +7164,16 @@ void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA,
}
}
- if (IsLinux)
- if (ToolChain.getArch() == llvm::Triple::arm ||
- ToolChain.getArch() == llvm::Triple::armeb ||
- ToolChain.getArch() == llvm::Triple::thumb ||
- ToolChain.getArch() == llvm::Triple::thumbeb ||
- (!Args.hasArg(options::OPT_static) &&
- !Args.hasArg(options::OPT_shared))) {
- CmdArgs.push_back("-dynamic-linker");
- CmdArgs.push_back(Args.MakeArgString(
- D.DyldPrefix + getLinuxDynamicLinker(Args, LinuxToolChain)));
- }
+ if (ToolChain.getArch() == llvm::Triple::arm ||
+ ToolChain.getArch() == llvm::Triple::armeb ||
+ ToolChain.getArch() == llvm::Triple::thumb ||
+ ToolChain.getArch() == llvm::Triple::thumbeb ||
+ (!Args.hasArg(options::OPT_static) &&
+ !Args.hasArg(options::OPT_shared))) {
+ CmdArgs.push_back("-dynamic-linker");
+ CmdArgs.push_back(Args.MakeArgString(
+ D.DyldPrefix + getLinuxDynamicLinker(Args, ToolChain)));
+ }
CmdArgs.push_back("-o");
CmdArgs.push_back(Output.getFilename());
@@ -7309,176 +7305,7 @@ void gnutools::Link::ConstructJob(Compilation &C, const JobAction &JA,
}
}
- const char *Exec =
- IsLinux ? LinuxToolChain.Linker.c_str()
- : Args.MakeArgString(ToolChain.GetLinkerPath());
- C.addCommand(new Command(JA, *this, Exec, CmdArgs));
-}
-
-void cygwin::Link::AddLibGCC(const ArgList &Args, ArgStringList &CmdArgs) const {
- if (Args.hasArg(options::OPT_static) ||
- Args.hasArg(options::OPT_static_libgcc)) {
- CmdArgs.push_back("-lgcc");
- CmdArgs.push_back("-lgcc_eh");
- } else {
- CmdArgs.push_back("-lgcc_s");
- CmdArgs.push_back("-lgcc");
- }
-}
-
-void cygwin::Link::ConstructJob(Compilation &C, const JobAction &JA,
- const InputInfo &Output,
- const InputInfoList &Inputs,
- const llvm::opt::ArgList &Args,
- const char *LinkingOutput) const {
- static const char *WrappedSymbols[] = {
- "_Znwj",
- "_Znaj",
- "_ZdlPv",
- "_ZdaPv",
- "_ZnwjRKSt9nothrow_t",
- "_ZnajRKSt9nothrow_t",
- "_ZdlPvRKSt9nothrow_t",
- "_ZdaPvRKSt9nothrow_t",
- };
-
- const auto &ToolChain = getToolChain();
- ArgStringList CmdArgs;
-
- // Silence warning for "clang -g foo.o -o foo"
- Args.ClaimAllArgs(options::OPT_g_Group);
- // and "clang -emit-llvm foo.o -o foo"
- Args.ClaimAllArgs(options::OPT_emit_llvm);
- // and for "clang -w foo.o -o foo". Other warning options are already
- // handled somewhere else.
- Args.ClaimAllArgs(options::OPT_w);
-
- // FIXME: -mwindows should pass --subsystem windows
- // FIXME: -mconsole should pass --subsystem console
-
- // FIXME: this can be disabled via -mno-use-libstdc-wrappers
- for (const auto &Symbol : WrappedSymbols) {
- CmdArgs.push_back("--wrap");
- CmdArgs.push_back(Symbol);
- }
-
- if (Args.hasArg(options::OPT_shared))
- CmdArgs.push_back("--shared");
- else if (Args.hasArg(options::OPT_mdll))
- CmdArgs.push_back("--dll");
-
- if (Args.hasArg(options::OPT_static))
- CmdArgs.push_back("-Bstatic");
- else
- CmdArgs.push_back("-Bdynamic");
-
- if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_mdll)) {
- CmdArgs.push_back("--enable-auto-image-base");
-
- CmdArgs.push_back("-e");
- CmdArgs.push_back("__cygwin_dll_entry@12");
- }
-
- CmdArgs.push_back("--dll-search-prefix=cyg");
-
- if (Args.hasArg(options::OPT_rdynamic))
- CmdArgs.push_back("--export-all-symbols");
-
- if (!Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_mdll)) {
- CmdArgs.push_back("--large-address-aware");
- CmdArgs.push_back("--tsaware");
- }
-
- if (Args.hasArg(options::OPT_pie))
- CmdArgs.push_back("-pie");
-
- AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs);
-
- Args.AddAllArgs(CmdArgs, options::OPT_e);
- // FIXME: add -N, -n flags
- Args.AddLastArg(CmdArgs, options::OPT_r);
- Args.AddLastArg(CmdArgs, options::OPT_s);
- Args.AddLastArg(CmdArgs, options::OPT_t);
- Args.AddAllArgs(CmdArgs, options::OPT_u_Group);
- Args.AddLastArg(CmdArgs, options::OPT_Z_Flag);
-
- if (!Args.hasArg(options::OPT_nostdlib) &&
- !Args.hasArg(options::OPT_nostartfiles)) {
- if (!Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_mdll)) {
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o")));
- if (Args.hasArg(options::OPT_pg))
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("gcrt0.o")));
- }
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtbegin.o")));
- }
-
- Args.AddAllArgs(CmdArgs, options::OPT_L);
-
- // FIXME: support mudflap: wrap the following:
- // -fmudflap || -fmudflapth:
- // static const char *WrappedStaticSymbols[] = {
- // "malloc", "free", "calloc", "realloc", "mmap", "mmap64", "munmap",
- // "alloca",
- // };
- // -fmudflapth:
- // static const char *WrappedStaticSymbols[] = {
- // "pthread_create",
- // };
- // -fmudflap || -fmudflapth:
- // static const char *WrappedSymbols[] = {
- // "main",
- // };
-
- for (const auto &Path : ToolChain.getFilePaths())
- CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + Path));
-
- CmdArgs.push_back("-o");
- CmdArgs.push_back(Output.getFilename());
-
- // FIXME: support -freopen, -ftree-parallelize-loops=*
- // FIXME: support itm (-fgnu-tm)
- // FIXME: support mudflap (-fmudflap || -fmudflapth) ? -export-dynamic : ""
-
- if (Args.hasArg(options::OPT_fsplit_stack))
- CmdArgs.push_back("--wrap=pthread_create");
-
- if (Args.hasArg(options::OPT_fprofile_arcs) ||
- Args.hasArg(options::OPT_fprofile_generate) ||
- Args.hasArg(options::OPT_coverage))
- CmdArgs.push_back("-lgcov");
-
- if (!Args.hasArg(options::OPT_nostdlib)) {
- if (!Args.hasArg(options::OPT_nodefaultlibs)) {
- // FIXME: support asan, tsan
-
- if (Args.hasArg(options::OPT_fstack_protector) ||
- Args.hasArg(options::OPT_fstack_protector_all)) {
- CmdArgs.push_back("-lssp_nonshared");
- CmdArgs.push_back("-lssp");
- }
-
- AddLibGCC(Args, CmdArgs);
- if (Args.hasArg(options::OPT_pg))
- CmdArgs.push_back("-lgmon");
- CmdArgs.push_back("-lcygwin");
- // FIXME: -mwindows: -lgdi32 -lcomdlg32
- CmdArgs.push_back("-ladvapi32");
- CmdArgs.push_back("-lshell32");
- CmdArgs.push_back("-luser32");
- CmdArgs.push_back("-lkernel32");
- AddLibGCC(Args, CmdArgs);
- }
-
- if (!Args.hasArg(options::OPT_nostartfiles)) {
- ToolChain.AddFastMathRuntimeIfAvailable(Args, CmdArgs);
- CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));
- }
- }
-
- Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
-
- const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
- C.addCommand(new Command(JA, *this, Exec, CmdArgs));
+ C.addCommand(new Command(JA, *this, ToolChain.Linker.c_str(), CmdArgs));
}
void minix::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
diff --git a/clang/lib/Driver/Tools.h b/clang/lib/Driver/Tools.h
index 708715e4fd1..c4e6d6c8298 100644
--- a/clang/lib/Driver/Tools.h
+++ b/clang/lib/Driver/Tools.h
@@ -457,24 +457,6 @@ namespace gnutools {
const char *LinkingOutput) const override;
};
}
-
-namespace cygwin {
-class LLVM_LIBRARY_VISIBILITY Link : public Tool {
-public:
- Link(const ToolChain &TC) : Tool("cygwin::Link", "linker", TC) {}
-
- bool hasIntegratedCPP() const override { return false; }
- bool isLinkJob() const override { return true; }
-
- void ConstructJob(Compilation &C, const JobAction &JA,
- const InputInfo &Output, const InputInfoList &Inputs,
- const llvm::opt::ArgList &Args,
- const char *LinkingOutput) const override;
-private:
- void AddLibGCC(const llvm::opt::ArgList &Args, ArgStringList &CmdArgs) const;
-};
-}
-
/// minix -- Directly call GNU Binutils assembler and linker
namespace minix {
class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
diff --git a/clang/test/Driver/bindings.c b/clang/test/Driver/bindings.c
index 9653a5794e5..dd8ad14f672 100644
--- a/clang/test/Driver/bindings.c
+++ b/clang/test/Driver/bindings.c
@@ -2,7 +2,7 @@
// RUN: %clang -target i386-unknown-unknown -ccc-print-bindings -no-integrated-as %s 2>&1 | FileCheck %s --check-prefix=CHECK01
// CHECK01: "clang", inputs: ["{{.*}}bindings.c"], output: "{{.*}}.s"
// CHECK01: "GNU::Assemble", inputs: ["{{.*}}.s"], output: "{{.*}}.o"
-// CHECK01: "GNU::Link", inputs: ["{{.*}}.o"], output: "a.out"
+// CHECK01: "gcc::Link", inputs: ["{{.*}}.o"], output: "a.out"
// Clang control options
diff --git a/clang/test/Driver/cygwin-link.c b/clang/test/Driver/cygwin-link.c
deleted file mode 100644
index f622b8877fa..00000000000
--- a/clang/test/Driver/cygwin-link.c
+++ /dev/null
@@ -1,48 +0,0 @@
-// RUN: %clang -### -target i686-windows-cygnus %s 2>&1 \
-// RUN: | FileCheck %s -check-prefix CHECK-EXE -check-prefix CHECK
-
-// RUN: %clang -shared -### -target i686-windows-cygnus %s 2>&1 \
-// RUN: | FileCheck %s -check-prefix CHECK-SHARED -check-prefix CHECK
-
-// RUN: %clang -static -### -target i686-windows-cygnus %s 2>&1 \
-// RUN: | FileCheck %s -check-prefix CHECK-STATIC -check-prefix CHECK
-
-// CHECK: "{{.*}}ld"
-// CHECK: "--wrap" "_Znwj"
-// CHECK: "--wrap" "_Znaj"
-// CHECK: "--wrap" "_ZdlPv"
-// CHECK: "--wrap" "_ZdaPv"
-// CHECK: "--wrap" "_ZnwjRKSt9nothrow_t"
-// CHECK: "--wrap" "_ZnajRKSt9nothrow_t"
-// CHECK: "--wrap" "_ZdlPvRKSt9nothrow_t"
-// CHECK: "--wrap" "_ZdaPvRKSt9nothrow_t"
-// CHECK-SHARED: "--shared"
-// CHECK-STATIC: "-Bstatic"
-// CHECK-DYNAMIC: "-Bdynamic"
-// CHECK-EXE: "-Bdynamic"
-// CHECK-SHARED: "--enable-auto-image-base"
-// CHECK-SHARED: "-e" "__cygwin_dll_entry@12"
-// CHECK: "--dll-search-prefix=cyg"
-// CHECK-EXE: "--large-address-aware"
-// CHECK-STATIC: "--large-address-aware"
-// CHECK-EXE: "--tsaware"
-// CHECK-STATIC: "--tsaware"
-// CHECK: .o"
-// CHECK-EXE: crt0.o"
-// CHECK-STATIC: crt0.o"
-// CHECK: crtbegin.o"
-// CHECK: "-L/usr/lib"
-// CHECK: "-o"
-// CHECK-EXE: "-lgcc_s"
-// CHECK: "-lgcc"
-// CHECK-STATIC: "-lgcc_eh"
-// CHECK: "-lcygwin"
-// CHECK: "-ladvapi32"
-// CHECK: "-lshell32"
-// CHECK: "-luser32"
-// CHECK: "-lkernel32"
-// CHECK-EXE: "-lgcc_s"
-// CHECK: "-lgcc"
-// CHECK-STATIC: "-lgcc_eh"
-// CHECK: crtend.o"
-
diff --git a/clang/test/Driver/gcc_forward.c b/clang/test/Driver/gcc_forward.c
index a58cd9f5013..3bc413193f1 100644
--- a/clang/test/Driver/gcc_forward.c
+++ b/clang/test/Driver/gcc_forward.c
@@ -17,14 +17,14 @@
// CHECK: as{{[^"]*}}"
// CHECK: "-o" "{{[^"]+}}.o"
//
-// gnu-ld
-// CHECK: ld{{[^"]*}}"
+// gcc-ld
+// CHECK: gcc{{[^"]*}}"
// CHECK-NOT: "-mlinker-version=10"
// CHECK-NOT: "-Xclang"
// CHECK-NOT: "foo-bar"
// CHECK-NOT: "-Wall"
// CHECK-NOT: "-Wdocumentation"
-// CHECK-NOT: "-march"
+// CHECK: -march
// CHECK-NOT: "-mlinker-version=10"
// CHECK-NOT: "-Xclang"
// CHECK-NOT: "foo-bar"
OpenPOWER on IntegriCloud