Index: projects/compiler-rt/lib/asan/CMakeLists.txt =================================================================== --- projects/compiler-rt/lib/asan/CMakeLists.txt +++ projects/compiler-rt/lib/asan/CMakeLists.txt @@ -1,12 +1,5 @@ # Build for the AddressSanitizer runtime support library. -if(APPLE) -# Don't set rpath for the ASan libraries. Developers are encouraged to ship -# their binaries together with the corresponding ASan runtime libraries, -# so they'll anyway need to fix the rpath and the install name. -set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF) -endif() - set(ASAN_SOURCES asan_allocator2.cc asan_activation.cc Index: projects/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c =================================================================== --- projects/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c +++ projects/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c @@ -5,9 +5,7 @@ // RUN: %clang_asan -dead_strip -O2 %s -o %t.exe // RUN: rm -f %t.symbols %t.interface -// RUN: nm -g `otool -L %t.exe | grep "asan_osx_dynamic.dylib" | \ -// RUN: tr -d '\011' | \ -// RUN: sed "s/.dylib.*/.dylib/"` \ +// RUN: nm -g `%clang_asan %s -fsanitize=address -### 2>&1 | grep "libclang_rt.asan_osx_dynamic.dylib" | sed -e 's/.*"\(.*libclang_rt.asan_osx_dynamic.dylib\)".*/\1/'` \ // RUN: | grep " T " | sed "s/.* T //" \ // RUN: | grep "__asan_" | sed "s/___asan_/__asan_/" \ // RUN: | sed -E "s/__asan_init_v[0-9]+/__asan_init/" \ Index: tools/clang/lib/Driver/ToolChains.h =================================================================== --- tools/clang/lib/Driver/ToolChains.h +++ tools/clang/lib/Driver/ToolChains.h @@ -236,7 +236,8 @@ llvm::opt::ArgStringList &CmdArgs, StringRef DarwinStaticLib, bool AlwaysLink = false, - bool IsEmbedded = false) const; + bool IsEmbedded = false, + bool AddRPath = false) const; /// } /// @name ToolChain Implementation Index: tools/clang/lib/Driver/ToolChains.cpp =================================================================== --- tools/clang/lib/Driver/ToolChains.cpp +++ tools/clang/lib/Driver/ToolChains.cpp @@ -292,16 +292,24 @@ void MachO::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs, StringRef DarwinStaticLib, bool AlwaysLink, - bool IsEmbedded) const { - SmallString<128> P(getDriver().ResourceDir); - llvm::sys::path::append(P, "lib", IsEmbedded ? "macho_embedded" : "darwin", - DarwinStaticLib); + bool IsEmbedded, bool AddRPath) const { + SmallString<128> Dir(getDriver().ResourceDir); + llvm::sys::path::append(Dir, "lib", IsEmbedded ? "macho_embedded" : "darwin"); + + SmallString<128> P(Dir); + llvm::sys::path::append(P, DarwinStaticLib); // For now, allow missing resource libraries to support developers who may // not have compiler-rt checked out or integrated into their build (unless // we explicitly force linking with this library). if (AlwaysLink || llvm::sys::fs::exists(P.str())) CmdArgs.push_back(Args.MakeArgString(P.str())); + + if (AddRPath) { + assert(DarwinStaticLib.endswith(".dylib") && "must be a dynamic library"); + CmdArgs.push_back("-rpath"); + CmdArgs.push_back(Args.MakeArgString(Dir.str())); + } } void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args, @@ -379,12 +387,12 @@ if (isTargetMacOS()) { AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.asan_osx_dynamic.dylib", - true); + true, false, true); } else { if (isTargetIOSSimulator()) { AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.asan_iossim_dynamic.dylib", - true); + true, false, true); } } }