r221279 - Use @rpath as LC_ID_DYLIB for ASan dylib on OS X
Kuba Brecka
kuba.brecka at gmail.com
Tue Nov 4 15:51:59 PST 2014
Hopefully fixed with r221316.
Kuba
On Tue, Nov 4, 2014 at 2:58 PM, Aaron Ballman <aaron at aaronballman.com>
wrote:
> 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 <kuba.brecka at gmail.com>
> 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
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141104/7a677f22/attachment.html>
More information about the cfe-commits
mailing list