def err_drv_unknown_language : Error<"language not recognized: '%0'">;
def err_drv_invalid_arch_name : Error<
"invalid arch name '%0'">;
-def err_drv_invalid_linker_name : Error<
- "invalid linker name in argument '%0'">;
def err_drv_invalid_rtlib_name : Error<
"invalid runtime library name in argument '%0'">;
def err_drv_unsupported_rtlib_for_platform : Error<
defm profile_use : BooleanFFlag<"profile-use">, Group<clang_ignored_f_Group>;
def fprofile_use_EQ : Joined<["-"], "fprofile-use=">, Group<clang_ignored_f_Group>;
-def fuse_ld_EQ : Joined<["-", "--"], "fuse-ld=">, Group<f_Group>,
- HelpText<"The suffix of the linker to use (e.g. bfd for ld.bfd).">;
+def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<clang_ignored_f_Group>;
defm align_functions : BooleanFFlag<"align-functions">, Group<clang_ignored_f_Group>;
def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<clang_ignored_f_Group>;
path_list &getProgramPaths() { return ProgramPaths; }
const path_list &getProgramPaths() const { return ProgramPaths; }
- /// Returns the linker path, respecting the -fuse-ld= argument to determine
- /// the linker suffix or name.
- std::string GetLinkerPath() const;
const SanitizerArgs& getSanitizerArgs() const;
return D.GetProgramPath(Name, *this);
}
-std::string ToolChain::GetLinkerPath() const {
- if (Arg *A = Args.getLastArg(options::OPT_fuse_ld_EQ)) {
- StringRef Value = A->getValue();
- // If we're passed -fuse-ld= with no argument, or with the argument ld,
- // then use whatever the default system linker is.
- if (Value.empty() || Value == "ld")
- return GetProgramPath("ld");
- std::string LinkerName = Value.str();
- std::string LD("ld.");
- LD += LinkerName;
- std::string LinkerPath = GetProgramPath(LD.c_str());
- bool Exists;
- if (!llvm::sys::fs::exists(LinkerPath, Exists) && Exists)
- return LinkerPath;
- getDriver().Diag(diag::err_drv_invalid_linker_name)
- << A->getAsString(Args);
- return "";
- }
- return GetProgramPath("ld");
-}
-
-
types::ID ToolChain::LookupTypeForExtension(const char *Ext) const {
return types::lookupTypeForExtension(Ext);
}
addProfileRT(getToolChain(), Args, CmdArgs, getToolChain().getTriple());
const char *Exec =
- Args.MakeArgString(getToolChain().GetLinkerPath());
+ Args.MakeArgString(getToolChain().GetProgramPath("ld"));
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
addProfileRT(getToolChain(), Args, CmdArgs, getToolChain().getTriple());
const char *Exec =
- Args.MakeArgString(getToolChain().GetLinkerPath());
+ Args.MakeArgString(getToolChain().GetProgramPath("ld"));
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
}
const char *Exec =
- Args.MakeArgString(getToolChain().GetLinkerPath());
+ Args.MakeArgString(getToolChain().GetProgramPath("ld"));
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
}
const char *Exec =
- Args.MakeArgString(getToolChain().GetLinkerPath());
+ Args.MakeArgString(getToolChain().GetProgramPath("ld"));
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
addProfileRT(ToolChain, Args, CmdArgs, ToolChain.getTriple());
const char *Exec =
- Args.MakeArgString(getToolChain().GetLinkerPath());
+ Args.MakeArgString(ToolChain.GetProgramPath("ld"));
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
addProfileRT(getToolChain(), Args, CmdArgs, getToolChain().getTriple());
- const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
+ const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("ld"));
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
Args.MakeArgString(getToolChain().GetFilePath("crtend.o")));
}
- const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
+ const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("ld"));
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
addProfileRT(getToolChain(), Args, CmdArgs, getToolChain().getTriple());
const char *Exec =
- Args.MakeArgString(getToolChain().GetLinkerPath());
+ Args.MakeArgString(getToolChain().GetProgramPath("ld"));
C.addCommand(new Command(JA, *this, Exec, CmdArgs));
}
+++ /dev/null
-// RUN: %clang %s -target x86_64-unknown-freebsd -### 2>&1 | FileCheck %s
-// CHECK: ld
-// RUN: %clang -fuse-ld=bfd --sysroot=%S/Inputs/basic_freebsd_tree \
-// RUN: -target x86_64-unknown-freebsd \
-// RUN: -B%S/Inputs/basic_freebsd_tree %s -### 2>&1 | \
-// RUN: FileCheck -check-prefix=CHECK-BFD %s
-// CHECK-BFD: ld.bfd
-// RUN: %clang -fuse-ld=gold --sysroot=%S/Inputs/basic_freebsd_tree \
-// RUN: -target x86_64-unknown-freebsd \
-// RUN: -B%S/Inputs/basic_freebsd_tree %s -### 2>&1 | \
-// RUN: FileCheck -check-prefix=CHECK-GOLD %s
-// CHECK-GOLD: ld.gold
-// RUN: %clang -fuse-ld=plib --sysroot=%S/Inputs/basic_freebsd_tree \
-// RUN: -target x86_64-unknown-freebsd \
-// RUN: -B%S/Inputs/basic_freebsd_tree %s -### 2>&1 | \
-// RUN: FileCheck -check-prefix=CHECK-PLIB %s
-// CHECK-PLIB: error: invalid linker name