[PATCH] D61145: [NFC][Sanitizer] Change "return type" of INTERCEPT_FUNCTION to void

Julian Lettner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 25 13:28:07 PDT 2019


yln created this revision.
Herald added subscribers: llvm-commits, Sanitizers, kubamracek.
Herald added projects: Sanitizers, LLVM.

This temporary change, tells us about all the places where the return
value of the macro is actually used. Next path will remove will cleanup
the macro and remove GetRealFuncAddress.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D61145

Files:
  compiler-rt/lib/asan/asan_interceptors.h
  compiler-rt/lib/interception/interception_linux.h
  compiler-rt/lib/msan/msan_interceptors.cc


Index: compiler-rt/lib/msan/msan_interceptors.cc
===================================================================
--- compiler-rt/lib/msan/msan_interceptors.cc
+++ compiler-rt/lib/msan/msan_interceptors.cc
@@ -1243,13 +1243,17 @@
 
 #define MSAN_INTERCEPT_FUNC(name)                                       \
   do {                                                                  \
-    if ((!INTERCEPT_FUNCTION(name) || !REAL(name)))                     \
+    INTERCEPT_FUNCTION(name);                                           \
+    bool same = (& (name) == & WRAP(name));                             \
+    if ((!same || !REAL(name)))                                         \
       VReport(1, "MemorySanitizer: failed to intercept '" #name "'\n"); \
   } while (0)
 
 #define MSAN_INTERCEPT_FUNC_VER(name, ver)                                    \
   do {                                                                        \
-    if ((!INTERCEPT_FUNCTION_VER(name, ver) || !REAL(name)))                  \
+    INTERCEPT_FUNCTION_VER(name, ver);                                        \
+    name##_type ptr = (::__interception::real_##name);                        \
+    if ((!ptr || !REAL(name)))                                                \
       VReport(                                                                \
           1, "MemorySanitizer: failed to intercept '" #name "@@" #ver "'\n"); \
   } while (0)
Index: compiler-rt/lib/interception/interception_linux.h
===================================================================
--- compiler-rt/lib/interception/interception_linux.h
+++ compiler-rt/lib/interception/interception_linux.h
@@ -30,16 +30,18 @@
 }  // namespace __interception
 
 #define INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func)                          \
-  ::__interception::GetRealFunctionAddress(                                \
+  do { ::__interception::GetRealFunctionAddress(                           \
       #func, (::__interception::uptr *)&__interception::PTR_TO_REAL(func), \
       (::__interception::uptr) & (func),                                   \
-      (::__interception::uptr) & WRAP(func))
+      (::__interception::uptr) & WRAP(func));                              \
+  } while (0)  // TODO(yln): temporarily make macro void.
 
 // Android,  Solaris and OpenBSD do not have dlvsym
 #if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD
 #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \
-  (::__interception::real_##func = (func##_type)(                \
-       unsigned long)::__interception::GetFuncAddrVer(#func, symver))
+  do { (::__interception::real_##func = (func##_type)(                \
+       unsigned long)::__interception::GetFuncAddrVer(#func, symver)); \
+  } while (0)
 #else
 #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \
   INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func)
Index: compiler-rt/lib/asan/asan_interceptors.h
===================================================================
--- compiler-rt/lib/asan/asan_interceptors.h
+++ compiler-rt/lib/asan/asan_interceptors.h
@@ -122,12 +122,16 @@
 #if !SANITIZER_MAC
 #define ASAN_INTERCEPT_FUNC(name)                                        \
   do {                                                                   \
-    if ((!INTERCEPT_FUNCTION(name) || !REAL(name)))                      \
+    INTERCEPT_FUNCTION(name);                                            \
+    bool same = (& (name) == & WRAP(name));                              \
+    if ((!same || !REAL(name)))                                          \
       VReport(1, "AddressSanitizer: failed to intercept '" #name "'\n"); \
   } while (0)
 #define ASAN_INTERCEPT_FUNC_VER(name, ver)                                     \
   do {                                                                         \
-    if ((!INTERCEPT_FUNCTION_VER(name, ver) || !REAL(name)))                   \
+    INTERCEPT_FUNCTION_VER(name, ver);                                         \
+    name##_type ptr = (::__interception::real_##name);                         \
+    if ((!ptr || !REAL(name)))                                                 \
       VReport(                                                                 \
           1, "AddressSanitizer: failed to intercept '" #name "@@" #ver "'\n"); \
   } while (0)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D61145.196717.patch
Type: text/x-patch
Size: 4372 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190425/f8ebcf36/attachment.bin>


More information about the llvm-commits mailing list