r233860 - [UBSan] Embed UBSan into ASan runtime (Clang part).
Richard Smith
richard at metafoo.co.uk
Thu Apr 2 15:24:16 PDT 2015
How does this affect UBSan + MSan and UBSan + TSan builds?
On Wed, Apr 1, 2015 at 3:42 PM, Alexey Samsonov <vonosmas at gmail.com> 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
> 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/20150402/0988caf2/attachment.html>
More information about the cfe-commits
mailing list