--- a/lib/Driver/ToolChain.cpp 2015-06-19 23:36:47.000000000 +0200 +++ b/lib/Driver/ToolChain.cpp 2015-07-12 00:43:10.134955874 +0200 @@ -184,6 +184,18 @@ std::string ToolChain::GetFilePath(const } std::string ToolChain::GetProgramPath(const char *Name) const { + if(!strcmp(Name, "ld")) { + // Handle -fuse-ld=XXX the way gcc does + if (Arg *A = Args.getLastArg(options::OPT_fuse_ld_EQ)) { + StringRef Value = A->getValue(); + if(Value.empty()) + return D.GetProgramPath(Name, *this); + const char *suffix = Value.str().c_str(); + char *newName = (char *) alloca(strlen(Name) + strlen(suffix) + 2); + sprintf(newName, "%s.%s", Name, suffix); + return D.GetProgramPath(newName, *this); + } + } return D.GetProgramPath(Name, *this); }