<div dir="ltr"><div>The 32-bit windows dynamic asan runtime build is still broken, see <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=957971">https://bugs.chromium.org/p/chromium/issues/detail?id=957971</a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Apr 26, 2019 at 7:27 PM Julian Lettner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: yln<br>
Date: Fri Apr 26 10:29:22 2019<br>
New Revision: 359325<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=359325&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=359325&view=rev</a><br>
Log:<br>
[NFC][Sanitizer] Change "return type" of INTERCEPT_FUNCTION to void<br>
<br>
This temporary change tells us about all the places where the return<br>
value of the INTERCEPT_FUNCTION macro is actually used. In the next<br>
patch I will cleanup the macro and remove GetRealFuncAddress.<br>
<br>
Reviewed By: vitalybuka<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D61145" rel="noreferrer" target="_blank">https://reviews.llvm.org/D61145</a><br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/asan/asan_interceptors.h<br>
    compiler-rt/trunk/lib/interception/interception_linux.h<br>
    compiler-rt/trunk/lib/msan/msan_interceptors.cc<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_interceptors.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.h?rev=359325&r1=359324&r2=359325&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.h?rev=359325&r1=359324&r2=359325&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_interceptors.h (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_interceptors.h Fri Apr 26 10:29:22 2019<br>
@@ -122,12 +122,16 @@ DECLARE_REAL(char*, strstr, const char *<br>
 #if !SANITIZER_MAC<br>
 #define ASAN_INTERCEPT_FUNC(name)                                        \<br>
   do {                                                                   \<br>
-    if ((!INTERCEPT_FUNCTION(name) || !REAL(name)))                      \<br>
+    INTERCEPT_FUNCTION(name);                                            \<br>
+    bool same = (& (name) == & WRAP(name));                              \<br>
+    if ((!same || !REAL(name)))                                          \<br>
       VReport(1, "AddressSanitizer: failed to intercept '" #name "'\n"); \<br>
   } while (0)<br>
 #define ASAN_INTERCEPT_FUNC_VER(name, ver)                                     \<br>
   do {                                                                         \<br>
-    if ((!INTERCEPT_FUNCTION_VER(name, ver) || !REAL(name)))                   \<br>
+    INTERCEPT_FUNCTION_VER(name, ver);                                         \<br>
+    name##_type ptr = (::__interception::real_##name);                         \<br>
+    if ((!ptr || !REAL(name)))                                                 \<br>
       VReport(                                                                 \<br>
           1, "AddressSanitizer: failed to intercept '" #name "@@" #ver "'\n"); \<br>
   } while (0)<br>
<br>
Modified: compiler-rt/trunk/lib/interception/interception_linux.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/interception/interception_linux.h?rev=359325&r1=359324&r2=359325&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/interception/interception_linux.h?rev=359325&r1=359324&r2=359325&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/interception/interception_linux.h (original)<br>
+++ compiler-rt/trunk/lib/interception/interception_linux.h Fri Apr 26 10:29:22 2019<br>
@@ -30,16 +30,18 @@ void *GetFuncAddrVer(const char *name, c<br>
 }  // namespace __interception<br>
<br>
 #define INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func)                          \<br>
-  ::__interception::GetRealFunctionAddress(                                \<br>
+  do { ::__interception::GetRealFunctionAddress(                           \<br>
       #func, (::__interception::uptr *)&__interception::PTR_TO_REAL(func), \<br>
       (::__interception::uptr) & (func),                                   \<br>
-      (::__interception::uptr) & WRAP(func))<br>
+      (::__interception::uptr) & WRAP(func));                              \<br>
+  } while (0)  // TODO(yln): temporarily make macro void.<br>
<br>
 // Android,  Solaris and OpenBSD do not have dlvsym<br>
 #if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD<br>
 #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \<br>
-  (::__interception::real_##func = (func##_type)(                \<br>
-       unsigned long)::__interception::GetFuncAddrVer(#func, symver))<br>
+  do { (::__interception::real_##func = (func##_type)(                \<br>
+       unsigned long)::__interception::GetFuncAddrVer(#func, symver)); \<br>
+  } while (0)<br>
 #else<br>
 #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \<br>
   INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func)<br>
<br>
Modified: compiler-rt/trunk/lib/msan/msan_interceptors.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=359325&r1=359324&r2=359325&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=359325&r1=359324&r2=359325&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/msan/msan_interceptors.cc (original)<br>
+++ compiler-rt/trunk/lib/msan/msan_interceptors.cc Fri Apr 26 10:29:22 2019<br>
@@ -1243,13 +1243,17 @@ int OnExit() {<br>
<br>
 #define MSAN_INTERCEPT_FUNC(name)                                       \<br>
   do {                                                                  \<br>
-    if ((!INTERCEPT_FUNCTION(name) || !REAL(name)))                     \<br>
+    INTERCEPT_FUNCTION(name);                                           \<br>
+    bool same = (& (name) == & WRAP(name));                             \<br>
+    if ((!same || !REAL(name)))                                         \<br>
       VReport(1, "MemorySanitizer: failed to intercept '" #name "'\n"); \<br>
   } while (0)<br>
<br>
 #define MSAN_INTERCEPT_FUNC_VER(name, ver)                                    \<br>
   do {                                                                        \<br>
-    if ((!INTERCEPT_FUNCTION_VER(name, ver) || !REAL(name)))                  \<br>
+    INTERCEPT_FUNCTION_VER(name, ver);                                        \<br>
+    name##_type ptr = (::__interception::real_##name);                        \<br>
+    if ((!ptr || !REAL(name)))                                                \<br>
       VReport(                                                                \<br>
           1, "MemorySanitizer: failed to intercept '" #name "@@" #ver "'\n"); \<br>
   } while (0)<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>