From: Julian Lettner Date: Fri, 26 Apr 2019 17:29:22 +0000 (+0000) Subject: [NFC][Sanitizer] Change "return type" of INTERCEPT_FUNCTION to void X-Git-Tag: llvmorg-10-init~6905 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=aebd3014a5957029ada761109e6d5e1a90d67e18;p=platform%2Fupstream%2Fllvm.git [NFC][Sanitizer] Change "return type" of INTERCEPT_FUNCTION to void This temporary change tells us about all the places where the return value of the INTERCEPT_FUNCTION macro is actually used. In the next patch I will cleanup the macro and remove GetRealFuncAddress. Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D61145 llvm-svn: 359325 --- diff --git a/compiler-rt/lib/asan/asan_interceptors.h b/compiler-rt/lib/asan/asan_interceptors.h index 903ab59..d4a68e2 100644 --- a/compiler-rt/lib/asan/asan_interceptors.h +++ b/compiler-rt/lib/asan/asan_interceptors.h @@ -122,12 +122,16 @@ DECLARE_REAL(char*, strstr, const char *s1, const char *s2) #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) diff --git a/compiler-rt/lib/interception/interception_linux.h b/compiler-rt/lib/interception/interception_linux.h index 4c60bd8..abef9c9 100644 --- a/compiler-rt/lib/interception/interception_linux.h +++ b/compiler-rt/lib/interception/interception_linux.h @@ -30,16 +30,18 @@ void *GetFuncAddrVer(const char *name, const char *ver); } // 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) diff --git a/compiler-rt/lib/msan/msan_interceptors.cc b/compiler-rt/lib/msan/msan_interceptors.cc index f512080..0512d70 100644 --- a/compiler-rt/lib/msan/msan_interceptors.cc +++ b/compiler-rt/lib/msan/msan_interceptors.cc @@ -1243,13 +1243,17 @@ int OnExit() { #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)