--- llvm-3.5/tools/clang/include/clang/Driver/Options.td.fuseLd~ 2014-08-22 22:54:39.000000000 +0200 +++ llvm-3.5/tools/clang/include/clang/Driver/Options.td 2014-08-25 22:26:24.253526434 +0200 @@ -533,6 +533,7 @@ def funsafe_math_optimizations : Flag<[" Group; def fno_unsafe_math_optimizations : Flag<["-"], "fno-unsafe-math-optimizations">, Group; +def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group; def fassociative_math : Flag<["-"], "fassociative-math">, Group; def fno_associative_math : Flag<["-"], "fno-associative-math">, Group; def freciprocal_math : Flag<["-"], "freciprocal-math">, Group; @@ -1597,7 +1598,6 @@ def fprofile_dir : Joined<["-"], "fprofi defm profile_use : BooleanFFlag<"profile-use">, Group; def fprofile_use_EQ : Joined<["-"], "fprofile-use=">, Group; -def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group; defm align_functions : BooleanFFlag<"align-functions">, Group; def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group; --- llvm-3.5/tools/clang/lib/Driver/ToolChain.cpp.fuseLd~ 2014-08-22 22:54:39.000000000 +0200 +++ llvm-3.5/tools/clang/lib/Driver/ToolChain.cpp 2014-08-25 22:25:41.383062388 +0200 @@ -145,6 +145,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); }