Yes, I think it would be possible to combine UBSan with TSan and MSan in the same way. I planned to do experiment with that soon.
On Thu, Apr 2, 2015 at 5:56 PM, Richard Smith <[email protected]> wrote: > That's unfortunate; "can be used in any build without restrictions" used > to be one of UBSan's selling points. Would we be able to make these work > again by linking the UBSan runtime in the MSan and TSan ones too, or is the > issue more complicated than that? > > > On Thu, Apr 2, 2015 at 4:53 PM, Alexey Samsonov <[email protected]> > wrote: > >> UBSan+MSan and UBSan+TSan combinations are currently not supported. We >> print a diagnostic in this case. >> >> On Thu, Apr 2, 2015 at 3:24 PM, Richard Smith <[email protected]> >> wrote: >> >>> How does this affect UBSan + MSan and UBSan + TSan builds? >>> >>> On Wed, Apr 1, 2015 at 3:42 PM, Alexey Samsonov <[email protected]> >>> wrote: >>> >>>> Author: samsonov >>>> Date: Wed Apr 1 17:42:25 2015 >>>> New Revision: 233860 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=233860&view=rev >>>> Log: >>>> [UBSan] Embed UBSan into ASan runtime (Clang part). >>>> >>>> Summary: >>>> Change the way we use ASan and UBSan together. Instead of keeping two >>>> separate runtimes (libclang_rt.asan and libclang_rt.ubsan), embed UBSan >>>> into ASan and get rid of libclang_rt.ubsan. If UBSan is not supported on >>>> a platform, all UBSan sources are just compiled into dummy empty object >>>> files. UBSan initialization code (e.g. flag parsing) is directly called >>>> from ASan initialization, so we are able to enforce correct >>>> initialization order. >>>> >>>> This mirrors the approach we already use for ASan+LSan. This change >>>> doesn't >>>> modify the way we use standalone UBSan. >>>> >>>> Test Plan: regression test suite >>>> >>>> Reviewers: kubabrecka, zaks.anna, kcc, rsmith >>>> >>>> Subscribers: cfe-commits >>>> >>>> Differential Revision: http://reviews.llvm.org/D8645 >>>> >>>> Modified: >>>> cfe/trunk/lib/Driver/SanitizerArgs.cpp >>>> cfe/trunk/lib/Driver/ToolChains.cpp >>>> cfe/trunk/lib/Driver/Tools.cpp >>>> cfe/trunk/test/Driver/sanitizer-ld.c >>>> >>>> Modified: cfe/trunk/lib/Driver/SanitizerArgs.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=233860&r1=233859&r2=233860&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/lib/Driver/SanitizerArgs.cpp (original) >>>> +++ cfe/trunk/lib/Driver/SanitizerArgs.cpp Wed Apr 1 17:42:25 2015 >>>> @@ -159,7 +159,8 @@ static bool getDefaultBlacklist(const Dr >>>> } >>>> >>>> bool SanitizerArgs::needsUbsanRt() const { >>>> - return !UbsanTrapOnError && hasOneOf(Sanitizers, NeedsUbsanRt); >>>> + return !UbsanTrapOnError && hasOneOf(Sanitizers, NeedsUbsanRt) && >>>> + !Sanitizers.has(SanitizerKind::Address); >>>> } >>>> >>>> bool SanitizerArgs::requiresPIE() const { >>>> >>>> Modified: cfe/trunk/lib/Driver/ToolChains.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=233860&r1=233859&r2=233860&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/lib/Driver/ToolChains.cpp (original) >>>> +++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Apr 1 17:42:25 2015 >>>> @@ -338,6 +338,9 @@ void DarwinClang::AddLinkSanitizerLibArg >>>> OS + "_dynamic.dylib").str(), >>>> /*AlwaysLink*/ true, /*IsEmbedded*/ false, >>>> /*AddRPath*/ true); >>>> + // Add explicit dependcy on -lc++abi, as -lc++ doesn't re-export >>>> + // all RTTI-related symbols that UBSan uses. >>>> + CmdArgs.push_back("-lc++abi"); >>>> } >>>> >>>> void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args, >>>> @@ -401,9 +404,6 @@ void DarwinClang::AddLinkRuntimeLibArgs( >>>> << "-fsanitize=undefined"; >>>> } else { >>>> AddLinkSanitizerLibArgs(Args, CmdArgs, "ubsan"); >>>> - // Add explicit dependcy on -lc++abi, as -lc++ doesn't re-export >>>> - // all RTTI-related symbols that UBSan uses. >>>> - CmdArgs.push_back("-lc++abi"); >>>> } >>>> } >>>> >>>> >>>> Modified: cfe/trunk/lib/Driver/Tools.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=233860&r1=233859&r2=233860&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/lib/Driver/Tools.cpp (original) >>>> +++ cfe/trunk/lib/Driver/Tools.cpp Wed Apr 1 17:42:25 2015 >>>> @@ -2307,18 +2307,10 @@ collectSanitizerRuntimes(const ToolChain >>>> StaticRuntimes.push_back("msan"); >>>> if (SanArgs.needsTsanRt()) >>>> StaticRuntimes.push_back("tsan"); >>>> - // WARNING: UBSan should always go last. >>>> if (SanArgs.needsUbsanRt()) { >>>> - // Check if UBSan is combined with another sanitizers. >>>> - if (StaticRuntimes.empty()) { >>>> - StaticRuntimes.push_back("ubsan_standalone"); >>>> - if (SanArgs.linkCXXRuntimes()) >>>> - StaticRuntimes.push_back("ubsan_standalone_cxx"); >>>> - } else { >>>> - StaticRuntimes.push_back("ubsan"); >>>> - if (SanArgs.linkCXXRuntimes()) >>>> - StaticRuntimes.push_back("ubsan_cxx"); >>>> - } >>>> + StaticRuntimes.push_back("ubsan_standalone"); >>>> + if (SanArgs.linkCXXRuntimes()) >>>> + StaticRuntimes.push_back("ubsan_standalone_cxx"); >>>> } >>>> } >>>> >>>> >>>> Modified: cfe/trunk/test/Driver/sanitizer-ld.c >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/sanitizer-ld.c?rev=233860&r1=233859&r2=233860&view=diff >>>> >>>> ============================================================================== >>>> --- cfe/trunk/test/Driver/sanitizer-ld.c (original) >>>> +++ cfe/trunk/test/Driver/sanitizer-ld.c Wed Apr 1 17:42:25 2015 >>>> @@ -227,8 +227,7 @@ >>>> // RUN: | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX %s >>>> // CHECK-ASAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}" >>>> // CHECK-ASAN-UBSAN-LINUX: "-whole-archive" >>>> "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive" >>>> -// CHECK-ASAN-UBSAN-LINUX: "-whole-archive" >>>> "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive" >>>> -// CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx >>>> +// CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.ubsan >>>> // CHECK-ASAN-UBSAN-LINUX-NOT: "-lstdc++" >>>> // CHECK-ASAN-UBSAN-LINUX: "-lpthread" >>>> >>>> @@ -238,8 +237,8 @@ >>>> // RUN: | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX-CXX %s >>>> // CHECK-ASAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}" >>>> // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" >>>> "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive" >>>> -// CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" >>>> "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive" >>>> -// CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" >>>> "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive" >>>> +// CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" >>>> "{{.*}}libclang_rt.asan_cxx-i386.a" "-no-whole-archive" >>>> +// CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.ubsan >>>> // CHECK-ASAN-UBSAN-LINUX-CXX: "-lstdc++" >>>> // CHECK-ASAN-UBSAN-LINUX-CXX: "-lpthread" >>>> >>>> >>>> >>>> _______________________________________________ >>>> cfe-commits mailing list >>>> [email protected] >>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >>>> >>> >>> >> >> >> -- >> Alexey Samsonov >> [email protected] >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >> > -- Alexey Samsonov [email protected]
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
