summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Driver/ToolChains/Hexagon.cpp11
-rwxr-xr-xclang/test/Driver/Inputs/hexagon_tree/Tools/bin/ld.lld0
-rw-r--r--clang/test/Driver/hexagon-toolchain-elf.c22
3 files changed, 30 insertions, 3 deletions
diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp b/clang/lib/Driver/ToolChains/Hexagon.cpp
index 4a735a2a1d5..e4d9ea8a70f 100644
--- a/clang/lib/Driver/ToolChains/Hexagon.cpp
+++ b/clang/lib/Driver/ToolChains/Hexagon.cpp
@@ -209,7 +209,11 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA,
bool IncStartFiles = !Args.hasArg(options::OPT_nostartfiles);
bool IncDefLibs = !Args.hasArg(options::OPT_nodefaultlibs);
bool UseG0 = false;
+ const char *Exec = Args.MakeArgString(HTC.GetLinkerPath());
+ bool UseLLD = (llvm::sys::path::filename(Exec).equals_lower("ld.lld") ||
+ llvm::sys::path::stem(Exec).equals_lower("ld.lld"));
bool UseShared = IsShared && !IsStatic;
+ StringRef CpuVer = toolchains::HexagonToolChain::GetTargetCPUVersion(Args);
//----------------------------------------------------------------------------
// Silence warnings for various options
@@ -232,9 +236,10 @@ constructHexagonLinkArgs(Compilation &C, const JobAction &JA,
for (const auto &Opt : HTC.ExtraOpts)
CmdArgs.push_back(Opt.c_str());
- CmdArgs.push_back("-march=hexagon");
- StringRef CpuVer = toolchains::HexagonToolChain::GetTargetCPUVersion(Args);
- CmdArgs.push_back(Args.MakeArgString("-mcpu=hexagon" + CpuVer));
+ if (!UseLLD) {
+ CmdArgs.push_back("-march=hexagon");
+ CmdArgs.push_back(Args.MakeArgString("-mcpu=hexagon" + CpuVer));
+ }
if (IsShared) {
CmdArgs.push_back("-shared");
diff --git a/clang/test/Driver/Inputs/hexagon_tree/Tools/bin/ld.lld b/clang/test/Driver/Inputs/hexagon_tree/Tools/bin/ld.lld
new file mode 100755
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/hexagon_tree/Tools/bin/ld.lld
diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c
index 661e758d931..0339619e1c1 100644
--- a/clang/test/Driver/hexagon-toolchain-elf.c
+++ b/clang/test/Driver/hexagon-toolchain-elf.c
@@ -536,3 +536,25 @@
// RUN: | FileCheck -check-prefix=CHECK080 %s
// CHECK080: "-cc1"
// CHECK080: "-Wreturn-type"
+
+// -----------------------------------------------------------------------------
+// Default, not passing -fuse-ld
+// -----------------------------------------------------------------------------
+// RUN: %clang -### -target hexagon-unknown-elf \
+// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
+// RUN: -mcpu=hexagonv60 \
+// RUN: %s 2>&1 \
+// RUN: | FileCheck -check-prefix=CHECK081 %s
+// CHECK081: "-march=hexagon"
+// CHECK081: "-mcpu=hexagonv60"
+// -----------------------------------------------------------------------------
+// Passing -fuse-ld=lld
+// -----------------------------------------------------------------------------
+// RUN: %clang -### -target hexagon-unknown-elf \
+// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
+// RUN: -mcpu=hexagonv60 \
+// RUN: -fuse-ld=lld \
+// RUN: %s 2>&1 \
+// RUN: | FileCheck -check-prefix=CHECK082 %s
+// CHECK082-NOT: -march=
+// CHECK082-NOT: -mcpu=
OpenPOWER on IntegriCloud