This is failing on Windows: http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/11355
~Aaron On Tue, Nov 4, 2014 at 12:35 PM, Kuba Brecka <[email protected]> wrote: > Author: kuba.brecka > Date: Tue Nov 4 11:35:17 2014 > New Revision: 221279 > > URL: http://llvm.org/viewvc/llvm-project?rev=221279&view=rev > Log: > Use @rpath as LC_ID_DYLIB for ASan dylib on OS X > > Change the LC_ID_DYLIB of ASan's dynamic libraries on OS X to be set to > "@rpath/libclang_rt.asan_osx_dynamic.dylib" and similarly for iossim. Clang > driver then sets the "-rpath" to be the real path to where clang currently > has the dylib (because clang uses the relative path to its current > executable). This means if you move the compiler or install the binary > release, -fsanitize=address will link to the proper library. > > Reviewed at http://reviews.llvm.org/D6018 > > > Modified: > cfe/trunk/lib/Driver/ToolChains.cpp > cfe/trunk/lib/Driver/ToolChains.h > cfe/trunk/test/Driver/darwin-sanitizer-ld.c > > Modified: cfe/trunk/lib/Driver/ToolChains.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=221279&r1=221278&r2=221279&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/ToolChains.cpp (original) > +++ cfe/trunk/lib/Driver/ToolChains.cpp Tue Nov 4 11:35:17 2014 > @@ -292,16 +292,36 @@ void DarwinClang::AddLinkARCArgs(const A > > void MachO::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs, > StringRef DarwinLibName, bool AlwaysLink, > - bool IsEmbedded) const { > - SmallString<128> P(getDriver().ResourceDir); > - llvm::sys::path::append(P, "lib", IsEmbedded ? "macho_embedded" : "darwin", > - DarwinLibName); > + 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, DarwinLibName); > > // 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())); > + > + // Adding the rpaths might negatively interact when other rpaths are > involved, > + // so we should make sure we add the rpaths last, after all user-specified > + // rpaths. This is currently true from this place, but we need to be > + // careful if this function is ever called before user's rpaths are > emitted. > + if (AddRPath) { > + assert(DarwinLibName.endswith(".dylib") && "must be a dynamic library"); > + > + // Add @executable_path to rpath to support having the dylib copied with > + // the executable. > + CmdArgs.push_back("-rpath"); > + CmdArgs.push_back("@executable_path"); > + > + // Add the path to the resource dir to rpath to support using the dylib > + // from the default location without copying. > + CmdArgs.push_back("-rpath"); > + CmdArgs.push_back(Args.MakeArgString(Dir.str())); > + } > } > > void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args, > @@ -379,12 +399,14 @@ void DarwinClang::AddLinkRuntimeLibArgs( > if (isTargetMacOS()) { > AddLinkRuntimeLib(Args, CmdArgs, > "libclang_rt.asan_osx_dynamic.dylib", > - true); > + /*AlwaysLink*/ true, /*IsEmbedded*/ false, > + /*AddRPath*/ true); > } else { > if (isTargetIOSSimulator()) { > AddLinkRuntimeLib(Args, CmdArgs, > "libclang_rt.asan_iossim_dynamic.dylib", > - true); > + /*AlwaysLink*/ true, /*IsEmbedded*/ false, > + /*AddRPath*/ true); > } > } > } > > Modified: cfe/trunk/lib/Driver/ToolChains.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=221279&r1=221278&r2=221279&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/ToolChains.h (original) > +++ cfe/trunk/lib/Driver/ToolChains.h Tue Nov 4 11:35:17 2014 > @@ -236,7 +236,8 @@ public: > llvm::opt::ArgStringList &CmdArgs, > StringRef DarwinLibName, > bool AlwaysLink = false, > - bool IsEmbedded = false) const; > + bool IsEmbedded = false, > + bool AddRPath = false) const; > > /// } > /// @name ToolChain Implementation > > Modified: cfe/trunk/test/Driver/darwin-sanitizer-ld.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/darwin-sanitizer-ld.c?rev=221279&r1=221278&r2=221279&view=diff > ============================================================================== > --- cfe/trunk/test/Driver/darwin-sanitizer-ld.c (original) > +++ cfe/trunk/test/Driver/darwin-sanitizer-ld.c Tue Nov 4 11:35:17 2014 > @@ -6,7 +6,9 @@ > > // CHECK-ASAN: "{{.*}}ld{{(.exe)?}}" > // CHECK-ASAN: stdc++ > -// CHECK-ASAN: libclang_rt.asan_osx_dynamic.dylib" > +// CHECK-ASAN: /lib/darwin/libclang_rt.asan_osx_dynamic.dylib" > +// CHECK-ASAN: "-rpath" "@executable_path" > +// CHECK-ASAN: "-rpath" "{{.*}}/lib/darwin" > > // RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \ > // RUN: -fsanitize=address -mios-simulator-version-min=7.0 %s -o %t.o 2>&1 > \ > @@ -14,7 +16,9 @@ > > // CHECK-ASAN-IOSSIM: "{{.*}}ld{{(.exe)?}}" > // CHECK-ASAN-IOSSIM: lc++ > -// CHECK-ASAN-IOSSIM: libclang_rt.asan_iossim_dynamic.dylib" > +// CHECK-ASAN-IOSSIM: /lib/darwin/libclang_rt.asan_iossim_dynamic.dylib" > +// CHECK-ASAN-IOSSIM: "-rpath" "@executable_path" > +// CHECK-ASAN-IOSSIM: "-rpath" "{{.*}}/lib/darwin" > > // RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \ > // RUN: -fPIC -shared -fsanitize=address %s -o %t.so 2>&1 \ > @@ -22,7 +26,9 @@ > > // CHECK-DYN-ASAN: "{{.*}}ld{{(.exe)?}}" > // CHECK-DYN-ASAN: "-dylib" > -// CHECK-DYN-ASAN: libclang_rt.asan_osx_dynamic.dylib > +// CHECK-DYN-ASAN: /lib/darwin/libclang_rt.asan_osx_dynamic.dylib" > +// CHECK-DYN-ASAN: "-rpath" "@executable_path" > +// CHECK-DYN-ASAN: "-rpath" "{{.*}}/lib/darwin" > > // RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \ > // RUN: -fsanitize=undefined %s -o %t.o 2>&1 \ > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
