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 >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
