<div dir="ltr">UBSan+MSan and UBSan+TSan combinations are currently not supported. We print a diagnostic in this case.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 2, 2015 at 3:24 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">How does this affect UBSan + MSan and UBSan + TSan builds?</div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 1, 2015 at 3:42 PM, Alexey Samsonov <span dir="ltr"><<a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: samsonov<br>
Date: Wed Apr  1 17:42:25 2015<br>
New Revision: 233860<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=233860&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=233860&view=rev</a><br>
Log:<br>
[UBSan] Embed UBSan into ASan runtime (Clang part).<br>
<br>
Summary:<br>
Change the way we use ASan and UBSan together. Instead of keeping two<br>
separate runtimes (libclang_rt.asan and libclang_rt.ubsan), embed UBSan<br>
into ASan and get rid of libclang_rt.ubsan. If UBSan is not supported on<br>
a platform, all UBSan sources are just compiled into dummy empty object<br>
files. UBSan initialization code (e.g. flag parsing) is directly called<br>
from ASan initialization, so we are able to enforce correct<br>
initialization order.<br>
<br>
This mirrors the approach we already use for ASan+LSan. This change doesn't<br>
modify the way we use standalone UBSan.<br>
<br>
Test Plan: regression test suite<br>
<br>
Reviewers: kubabrecka, zaks.anna, kcc, rsmith<br>
<br>
Subscribers: cfe-commits<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D8645" target="_blank">http://reviews.llvm.org/D8645</a><br>
<br>
Modified:<br>
    cfe/trunk/lib/Driver/SanitizerArgs.cpp<br>
    cfe/trunk/lib/Driver/ToolChains.cpp<br>
    cfe/trunk/lib/Driver/Tools.cpp<br>
    cfe/trunk/test/Driver/sanitizer-ld.c<br>
<br>
Modified: cfe/trunk/lib/Driver/SanitizerArgs.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=233860&r1=233859&r2=233860&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=233860&r1=233859&r2=233860&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/SanitizerArgs.cpp (original)<br>
+++ cfe/trunk/lib/Driver/SanitizerArgs.cpp Wed Apr  1 17:42:25 2015<br>
@@ -159,7 +159,8 @@ static bool getDefaultBlacklist(const Dr<br>
 }<br>
<br>
 bool SanitizerArgs::needsUbsanRt() const {<br>
-  return !UbsanTrapOnError && hasOneOf(Sanitizers, NeedsUbsanRt);<br>
+  return !UbsanTrapOnError && hasOneOf(Sanitizers, NeedsUbsanRt) &&<br>
+         !Sanitizers.has(SanitizerKind::Address);<br>
 }<br>
<br>
 bool SanitizerArgs::requiresPIE() const {<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=233860&r1=233859&r2=233860&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=233860&r1=233859&r2=233860&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Apr  1 17:42:25 2015<br>
@@ -338,6 +338,9 @@ void DarwinClang::AddLinkSanitizerLibArg<br>
                                     OS + "_dynamic.dylib").str(),<br>
                     /*AlwaysLink*/ true, /*IsEmbedded*/ false,<br>
                     /*AddRPath*/ true);<br>
+  // Add explicit dependcy on -lc++abi, as -lc++ doesn't re-export<br>
+  // all RTTI-related symbols that UBSan uses.<br>
+  CmdArgs.push_back("-lc++abi");<br>
 }<br>
<br>
 void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args,<br>
@@ -401,9 +404,6 @@ void DarwinClang::AddLinkRuntimeLibArgs(<br>
           << "-fsanitize=undefined";<br>
     } else {<br>
       AddLinkSanitizerLibArgs(Args, CmdArgs, "ubsan");<br>
-      // Add explicit dependcy on -lc++abi, as -lc++ doesn't re-export<br>
-      // all RTTI-related symbols that UBSan uses.<br>
-      CmdArgs.push_back("-lc++abi");<br>
     }<br>
   }<br>
<br>
<br>
Modified: cfe/trunk/lib/Driver/Tools.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=233860&r1=233859&r2=233860&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=233860&r1=233859&r2=233860&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/Tools.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Apr  1 17:42:25 2015<br>
@@ -2307,18 +2307,10 @@ collectSanitizerRuntimes(const ToolChain<br>
     StaticRuntimes.push_back("msan");<br>
   if (SanArgs.needsTsanRt())<br>
     StaticRuntimes.push_back("tsan");<br>
-  // WARNING: UBSan should always go last.<br>
   if (SanArgs.needsUbsanRt()) {<br>
-    // Check if UBSan is combined with another sanitizers.<br>
-    if (StaticRuntimes.empty()) {<br>
-      StaticRuntimes.push_back("ubsan_standalone");<br>
-      if (SanArgs.linkCXXRuntimes())<br>
-        StaticRuntimes.push_back("ubsan_standalone_cxx");<br>
-    } else {<br>
-      StaticRuntimes.push_back("ubsan");<br>
-      if (SanArgs.linkCXXRuntimes())<br>
-        StaticRuntimes.push_back("ubsan_cxx");<br>
-    }<br>
+    StaticRuntimes.push_back("ubsan_standalone");<br>
+    if (SanArgs.linkCXXRuntimes())<br>
+      StaticRuntimes.push_back("ubsan_standalone_cxx");<br>
   }<br>
 }<br>
<br>
<br>
Modified: cfe/trunk/test/Driver/sanitizer-ld.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/sanitizer-ld.c?rev=233860&r1=233859&r2=233860&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/sanitizer-ld.c?rev=233860&r1=233859&r2=233860&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Driver/sanitizer-ld.c (original)<br>
+++ cfe/trunk/test/Driver/sanitizer-ld.c Wed Apr  1 17:42:25 2015<br>
@@ -227,8 +227,7 @@<br>
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX %s<br>
 // CHECK-ASAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}"<br>
 // CHECK-ASAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"<br>
-// CHECK-ASAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"<br>
-// CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx<br>
+// CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.ubsan<br>
 // CHECK-ASAN-UBSAN-LINUX-NOT: "-lstdc++"<br>
 // CHECK-ASAN-UBSAN-LINUX: "-lpthread"<br>
<br>
@@ -238,8 +237,8 @@<br>
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX-CXX %s<br>
 // CHECK-ASAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}"<br>
 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive"<br>
-// CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive"<br>
-// CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive"<br>
+// CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan_cxx-i386.a" "-no-whole-archive"<br>
+// CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.ubsan<br>
 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lstdc++"<br>
 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lpthread"<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</div>