[cfe-commits] r168428 - in /cfe/trunk: lib/Driver/ToolChains.cpp lib/Driver/ToolChains.h test/Driver/darwin-sanitizer-ld.c
Bill Wendling
wendling at apple.com
Sun Nov 25 04:05:36 PST 2012
Ping! Could you fix this please? It's been failing for days now.
-bw
On Nov 23, 2012, at 10:24 AM, David Blaikie <dblaikie at gmail.com> wrote:
> On Wed, Nov 21, 2012 at 6:17 AM, Alexey Samsonov <samsonov at google.com> wrote:
>> Author: samsonov
>> Date: Wed Nov 21 08:17:42 2012
>> New Revision: 168428
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=168428&view=rev
>> Log:
>> [Sanitizer] force linking with static sanitizer runtimes on Darwin even if they are not found in resource directory. Add test checking sanitizer linker flags on Darwin.
>>
>> Added:
>> cfe/trunk/test/Driver/darwin-sanitizer-ld.c
>> Modified:
>> cfe/trunk/lib/Driver/ToolChains.cpp
>> cfe/trunk/lib/Driver/ToolChains.h
>>
>> Modified: cfe/trunk/lib/Driver/ToolChains.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=168428&r1=168427&r2=168428&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/ToolChains.cpp (original)
>> +++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Nov 21 08:17:42 2012
>> @@ -261,16 +261,18 @@
>>
>> void DarwinClang::AddLinkRuntimeLib(const ArgList &Args,
>> ArgStringList &CmdArgs,
>> - const char *DarwinStaticLib) const {
>> + const char *DarwinStaticLib,
>> + bool AlwaysLink) const {
>> llvm::sys::Path P(getDriver().ResourceDir);
>> P.appendComponent("lib");
>> P.appendComponent("darwin");
>> P.appendComponent(DarwinStaticLib);
>>
>> // For now, allow missing resource libraries to support developers who may
>> - // not have compiler-rt checked out or integrated into their build.
>> + // not have compiler-rt checked out or integrated into their build (unless
>> + // we explicitly force linking with this library).
>> bool Exists;
>> - if (!llvm::sys::fs::exists(P.str(), Exists) && Exists)
>> + if (AlwaysLink || (!llvm::sys::fs::exists(P.str(), Exists) && Exists))
>> CmdArgs.push_back(Args.MakeArgString(P.str()));
>> }
>>
>> @@ -326,7 +328,7 @@
>> getDriver().Diag(diag::err_drv_clang_unsupported_per_platform)
>> << "-fsanitize=undefined";
>> } else {
>> - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.ubsan_osx.a");
>> + AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.ubsan_osx.a", true);
>>
>> // The Ubsan runtime library requires C++.
>> AddCXXStdlibLibArgs(Args, CmdArgs);
>> @@ -343,7 +345,7 @@
>> getDriver().Diag(diag::err_drv_clang_unsupported_per_platform)
>> << "-fsanitize=address";
>> } else {
>> - AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.asan_osx.a");
>> + AddLinkRuntimeLib(Args, CmdArgs, "libclang_rt.asan_osx.a", true);
>>
>> // The ASAN runtime library requires C++ and CoreFoundation.
>> AddCXXStdlibLibArgs(Args, CmdArgs);
>>
>> Modified: cfe/trunk/lib/Driver/ToolChains.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=168428&r1=168427&r2=168428&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/ToolChains.h (original)
>> +++ cfe/trunk/lib/Driver/ToolChains.h Wed Nov 21 08:17:42 2012
>> @@ -370,9 +370,10 @@
>>
>> virtual void AddLinkRuntimeLibArgs(const ArgList &Args,
>> ArgStringList &CmdArgs) const;
>> - void AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs,
>> - const char *DarwinStaticLib) const;
>> -
>> + void AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs,
>> + const char *DarwinStaticLib,
>> + bool AlwaysLink = false) const;
>> +
>> virtual void AddCXXStdlibLibArgs(const ArgList &Args,
>> ArgStringList &CmdArgs) const;
>>
>>
>> Added: cfe/trunk/test/Driver/darwin-sanitizer-ld.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/darwin-sanitizer-ld.c?rev=168428&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Driver/darwin-sanitizer-ld.c (added)
>> +++ cfe/trunk/test/Driver/darwin-sanitizer-ld.c Wed Nov 21 08:17:42 2012
>> @@ -0,0 +1,40 @@
>> +// Test sanitizer link flags on Darwin.
>> +
>> +// RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \
>> +// RUN: -fsanitize=address %s -o %t.o 2>&1 \
>> +// RUN: | FileCheck --check-prefix=CHECK-ASAN %s
>> +
>> +// CHECK-ASAN: "{{.*}}ld"
>> +// CHECK-ASAN: libclang_rt.asan_osx.a"
>> +// CHECK-ASAN: "-lstdc++"
>
> This check fails on Snow Leopard, by the looks of it
>
> http://lab.llvm.org:8011/builders/clang-x86_64-darwin10-gdb/builds/37/steps/check-all/logs/darwin-sanitizer-ld.c
>
> Full output:
>
> macmini4:build buildslave$
> /Users/buildslave/build/Debug+Asserts/bin/clang
> -no-canonical-prefixes -### -target x86_64-darwin
> -fsanitize=address
> /Users/buildslave/llvm/tools/clang/test/Driver/darwin-sanitizer-ld.c
> -o /Users/buildslave/build/tools/clang/test/Driver/Output/darwin-sanitizer-ld.c.tmp.o
> 2>&1 | ./Debug+Asserts/bin/FileCheck --check-prefix=CHECK-ASAN
> /Users/buildslave/llvm/tools/clang/test/Driver/darwin-sanitizer-ld.c
> /Users/buildslave/llvm/tools/clang/test/Driver/darwin-sanitizer-ld.c:9:16:
> error: expected string not found in input
> // CHECK-ASAN: "-lstdc++"
> ^
> <stdin>:5:319: note: scanning from here
> "/usr/bin/ld" "-demangle" "-dynamic" "-arch" "x86_64"
> "-macosx_version_min" "10.4.0" "-o"
> "/Users/buildslave/build/tools/clang/test/Driver/Output/darwin-sanitizer-ld.c.tmp.o"
> "-lcrt1.o" "/tmp/darwin-sanitizer-ld-1EuvSw.o"
> "/Users/buildslave/build/Debug+Asserts/bin/../lib/clang/3.3/lib/darwin/libclang_rt.asan_osx.a"
> "/usr/lib/libstdc++.6.dylib" "-framework" "CoreFoundation" "-lSystem"
> "-lgcc_s.10.4"
>
>
>
>
> ^
> <stdin>:5:329: note: possible intended match here
> "/usr/bin/ld" "-demangle" "-dynamic" "-arch" "x86_64"
> "-macosx_version_min" "10.4.0" "-o"
> "/Users/buildslave/build/tools/clang/test/Driver/Output/darwin-sanitizer-ld.c.tmp.o"
> "-lcrt1.o" "/tmp/darwin-sanitizer-ld-1EuvSw.o"
> "/Users/buildslave/build/Debug+Asserts/bin/../lib/clang/3.3/lib/darwin/libclang_rt.asan_osx.a"
> "/usr/lib/libstdc++.6.dylib" "-framework" "CoreFoundation" "-lSystem"
> "-lgcc_s.10.4"
>
>
>
>
> ^
> macmini4:build buildslave$
> /Users/buildslave/build/Debug+Asserts/bin/clang
> -no-canonical-prefixes -### -target x86_64-darwin
> -fsanitize=address
> /Users/buildslave/llvm/tools/clang/test/Driver/darwin-sanitizer-ld.c
> -o /Users/buildslave/build/tools/clang/test/Driver/Output/darwin-sanitizer-ld.c.tmp.o
> 2>&1
> clang version 3.3 (trunk 168521)
> Target: x86_64--darwin
> Thread model: posix
> "/Users/buildslave/build/Debug+Asserts/bin/clang" "-cc1" "-triple"
> "x86_64--macosx10.4.0" "-emit-obj" "-mrelax-all" "-disable-free"
> "-main-file-name" "darwin-sanitizer-ld.c" "-mrelocation-model" "pic"
> "-pic-level" "2" "-mdisable-fp-elim" "-masm-verbose" "-munwind-tables"
> "-target-cpu" "core2" "-target-linker-version" "127.2.1"
> "-resource-dir"
> "/Users/buildslave/build/Debug+Asserts/bin/../lib/clang/3.3"
> "-fmodule-cache-path" "/var/tmp/clang-module-cache"
> "-fdebug-compilation-dir" "/Users/buildslave/build" "-ferror-limit"
> "19" "-fmessage-length" "238" "-fsanitize=address" "-mstackrealign"
> "-fblocks" "-fblocks-runtime-optional" "-fobjc-runtime=macosx-10.4.0"
> "-fobjc-dispatch-method=non-legacy"
> "-fobjc-default-synthesize-properties"
> "-fencode-extended-block-signature" "-fdiagnostics-show-option"
> "-fcolor-diagnostics" "-o" "/tmp/darwin-sanitizer-ld-WCSNj1.o" "-x"
> "c" "/Users/buildslave/llvm/tools/clang/test/Driver/darwin-sanitizer-ld.c"
> "/usr/bin/ld" "-demangle" "-dynamic" "-arch" "x86_64"
> "-macosx_version_min" "10.4.0" "-o"
> "/Users/buildslave/build/tools/clang/test/Driver/Output/darwin-sanitizer-ld.c.tmp.o"
> "-lcrt1.o" "/tmp/darwin-sanitizer-ld-WCSNj1.o"
> "/Users/buildslave/build/Debug+Asserts/bin/../lib/clang/3.3/lib/darwin/libclang_rt.asan_osx.a"
> "/usr/lib/libstdc++.6.dylib" "-framework" "CoreFoundation" "-lSystem"
> "-lgcc_s.10.4"
> macmini4:build buildslave$
>
> Is there something we could do to tidy this up? (either generalize the
> CHECKs or, if ASan doesn't support Snow Leopard, XFAIL the test there
> (I'm not sure how to detect that state in the REQUIRES lines, perhaps
> we'd need to plumb through another property)).
>
> Any other ideas? (I'm hoping to get this cleaned up so we can get the
> bot back to green - it's already hiding/noisy-ing up some debug info
> regressions also being reported by the bot)
>
>> +// CHECK-ASAN: "-framework" "CoreFoundation"
>> +
>> +// RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \
>> +// RUN: -fPIC -shared -fsanitize=address %s -o %t.so 2>&1 \
>> +// RUN: | FileCheck --check-prefix=CHECK-DYN-ASAN %s
>> +
>> +// CHECK-DYN-ASAN: "{{.*}}ld"
>> +// CHECK-DYN-ASAN: "-dylib"
>> +// CHECK-DYN-ASAN-NOT: libclang_rt.asan_osx.a
>> +// CHECK-DYN-ASAN: "-undefined"
>> +// CHECK-DYN-ASAN: "dynamic_lookup"
>> +// CHECK-DYN-ASAN-NOT: libclang_rt.asan_osx.a
>> +
>> +// RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \
>> +// RUN: -fsanitize=undefined %s -o %t.o 2>&1 \
>> +// RUN: | FileCheck --check-prefix=CHECK-UBSAN %s
>> +
>> +// CHECK-UBSAN: "{{.*}}ld"
>> +// CHECK-UBSAN: libclang_rt.ubsan_osx.a"
>> +// CHECK-UBSAN: "-lstdc++"
>> +
>> +// RUN: %clang -no-canonical-prefixes -### -target x86_64-darwin \
>> +// RUN: -fPIC -shared -fsanitize=undefined %s -o %t.so 2>&1 \
>> +// RUN: | FileCheck --check-prefix=CHECK-DYN-UBSAN %s
>> +
>> +// CHECK-DYN-UBSAN: "{{.*}}ld"
>> +// CHECK-DYN-UBSAN: "-dylib"
>> +// CHECK-DYN-UBSAN-NOT: libclang_rt.ubsan_osx.a
>> +// CHECK-DYN-UBSAN: "-undefined"
>> +// CHECK-DYN-UBSAN: "dynamic_lookup"
>> +// CHECK-DYN-UBSAN-NOT: libclang_rt.ubsan_osx.a
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list