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

Reply via email to