Index: tools/clang/lib/Driver/ToolChain.cpp =================================================================== --- tools/clang/lib/Driver/ToolChain.cpp +++ tools/clang/lib/Driver/ToolChain.cpp @@ -390,7 +390,11 @@ // then use whatever the default system linker is. return GetProgramPath(getDefaultLinker()); } else { - llvm::SmallString<8> LinkerName("ld."); + llvm::SmallString<8> LinkerName; + if (Triple.isOSDarwin()) + LinkerName.append("ld64."); + else + LinkerName.append("ld."); LinkerName.append(UseLinker); std::string LinkerPath(GetProgramPath(LinkerName.c_str())); Index: tools/lld/tools/lld/CMakeLists.txt =================================================================== --- tools/lld/tools/lld/CMakeLists.txt +++ tools/lld/tools/lld/CMakeLists.txt @@ -17,7 +17,7 @@ RUNTIME DESTINATION bin) if(NOT LLD_SYMLINKS_TO_CREATE) - set(LLD_SYMLINKS_TO_CREATE lld-link ld.lld) + set(LLD_SYMLINKS_TO_CREATE lld-link ld.lld ld64.lld) endif() foreach(link ${LLD_SYMLINKS_TO_CREATE}) Index: tools/lld/tools/lld/lld.cpp =================================================================== --- tools/lld/tools/lld/lld.cpp +++ tools/lld/tools/lld/lld.cpp @@ -45,7 +45,7 @@ return StringSwitch(S) .CasesLower("ld", "ld.lld", "gnu", Gnu) .CaseLower("link", WinLink) - .CaseLower("darwin", Darwin) + .CasesLower("ld64", "ld64.lld", "darwin", Darwin) .Default(Invalid); }