diff options
author | Vitaly Buka <vitalybuka@google.com> | 2016-12-23 00:37:07 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2016-12-23 00:37:07 +0000 |
commit | 7b949048ab6f53ad8ca60c33b2896a73a00d4193 (patch) | |
tree | 3af59493f8c6d8d6f2873634170a745be7747f85 /lib | |
parent | a0f301fe977ac26d18fc9b5e7aed3cb11f607bbc (diff) |
Fix interceptors setup broken after r290382
Summary: We setup these interceptors twice which hangs test on windows.
Reviewers: eugenis
Subscribers: llvm-commits, kubabrecka
Differential Revision: https://reviews.llvm.org/D28070
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@290393 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/asan/asan_interceptors.cc | 22 | ||||
-rw-r--r-- | lib/msan/msan_interceptors.cc | 4 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common_interceptors.inc | 2 |
3 files changed, 13 insertions, 15 deletions
diff --git a/lib/asan/asan_interceptors.cc b/lib/asan/asan_interceptors.cc index 9868bb6b5..1ef3a4df0 100644 --- a/lib/asan/asan_interceptors.cc +++ b/lib/asan/asan_interceptors.cc @@ -272,6 +272,17 @@ DECLARE_REAL_AND_INTERCEPTOR(void, free, void *) ASAN_MEMSET_IMPL(ctx, block, c, size); \ } while (false) +// In asan, REAL(memmove) is not used, but it is used in msan. +#define COMMON_INTERCEPT_FUNCTION_MEMCPY() \ + do { \ + if (PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE) { \ + ASAN_INTERCEPT_FUNC(memcpy); \ + } else { \ + ASSIGN_REAL(memcpy, memmove); \ + } \ + CHECK(REAL(memcpy)); \ + } while (false) + #include "sanitizer_common/sanitizer_common_interceptors.inc" // Syscall interceptors don't have contexts, we don't support suppressions @@ -722,17 +733,6 @@ void InitializeAsanInterceptors() { was_called_once = true; InitializeCommonInterceptors(); - // Intercept mem* functions. - ASAN_INTERCEPT_FUNC(memmove); - ASAN_INTERCEPT_FUNC(memset); - if (PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE) { - // In asan, REAL(memmove) is not used, but it is used in msan. - ASAN_INTERCEPT_FUNC(memcpy); - } else { - ASSIGN_REAL(memcpy, memmove); - } - CHECK(REAL(memcpy)); - // Intercept str* functions. ASAN_INTERCEPT_FUNC(strcat); // NOLINT ASAN_INTERCEPT_FUNC(strcpy); // NOLINT diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index 9a8bea37d..89ae45998 100644 --- a/lib/msan/msan_interceptors.cc +++ b/lib/msan/msan_interceptors.cc @@ -1291,6 +1291,7 @@ int OnExit() { } while (0) #define COMMON_INTERCEPT_FUNCTION(name) MSAN_INTERCEPT_FUNC(name) +#define COMMON_INTERCEPT_FUNCTION_MEMCPY() MSAN_INTERCEPT_FUNC(memcpy) #define COMMON_INTERCEPT_FUNCTION_VER(name, ver) \ MSAN_INTERCEPT_FUNC_VER(name, ver) #define COMMON_INTERCEPTOR_UNPOISON_PARAM(count) \ @@ -1516,11 +1517,8 @@ void InitializeInterceptors() { INTERCEPT_FUNCTION(fread); MSAN_MAYBE_INTERCEPT_FREAD_UNLOCKED; INTERCEPT_FUNCTION(readlink); - INTERCEPT_FUNCTION(memcpy); INTERCEPT_FUNCTION(memccpy); INTERCEPT_FUNCTION(mempcpy); - INTERCEPT_FUNCTION(memset); - INTERCEPT_FUNCTION(memmove); INTERCEPT_FUNCTION(bcopy); INTERCEPT_FUNCTION(wmemset); INTERCEPT_FUNCTION(wmemcpy); diff --git a/lib/sanitizer_common/sanitizer_common_interceptors.inc b/lib/sanitizer_common/sanitizer_common_interceptors.inc index 4859de2f7..6f472b0df 100644 --- a/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -641,7 +641,7 @@ INTERCEPTOR(void *, memcpy, void *dst, const void *src, uptr size) { COMMON_INTERCEPTOR_MEMCPY_IMPL(ctx, dst, src, size); } -#define INIT_MEMCPY COMMON_INTERCEPT_FUNCTION(memcpy) +#define INIT_MEMCPY COMMON_INTERCEPT_FUNCTION_MEMCPY() #else #define INIT_MEMCPY #endif |