Index: clang/lib/Driver/ToolChains/AVR.cpp =================================================================== --- clang/lib/Driver/ToolChains/AVR.cpp +++ clang/lib/Driver/ToolChains/AVR.cpp @@ -334,10 +334,12 @@ // No avr-libc found and so no runtime linked. D.Diag(diag::warn_drv_avr_libc_not_found); } else { // We have enough information to link stdlibs - std::string GCCRoot = std::string(GCCInstallation.getInstallPath()); + std::string GCCRoot(GCCInstallation.getInstallPath()); + std::string GCCParentPath(GCCInstallation.getParentLibPath()); std::string LibcRoot = AVRLibcRoot.getValue(); std::string SubPath = GetMCUSubPath(CPU); + getProgramPaths().push_back(GCCParentPath + "/../bin"); getFilePaths().push_back(LibcRoot + std::string("/lib/") + SubPath); getFilePaths().push_back(GCCRoot + std::string("/") + SubPath); @@ -419,9 +421,10 @@ llvm::Optional AVRToolChain::findAVRLibcInstallation() const { for (StringRef PossiblePath : PossibleAVRLibcLocations) { + std::string Path = getDriver().SysRoot + PossiblePath.str(); // Return the first avr-libc installation that exists. - if (llvm::sys::fs::is_directory(PossiblePath)) - return Optional(std::string(PossiblePath)); + if (llvm::sys::fs::is_directory(Path)) + return Optional(Path); } return llvm::None; Index: clang/test/Driver/avr-ld.c =================================================================== --- /dev/null +++ clang/test/Driver/avr-ld.c @@ -0,0 +1,2 @@ +// RUN: %clang -### --target=avr -mmcu=atmega328 --sysroot %S/Inputs/basic_avr_tree %s 2>&1 | FileCheck -check-prefix LINK %s +// LINK: {{".*ld.*"}} {{.*}} {{"-L.*avr5"}} {{.*}} "-Tdata=0x800100" {{.*}} "-latmega328" "-mavr5"