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