diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-03-27 14:20:34 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-03-27 14:20:34 +0000 |
commit | f88ba4ccd33263ff0bdab25654ac2923d59f091c (patch) | |
tree | f0a2b656cef152b87790e83f26e2f43342167157 | |
parent | 81ca90693b8729be48de24371cee242b8d2945e9 (diff) |
[sanitizer] Intercept __bzero on Mac.
This should make memset_test pass on Mac.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@204929 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/sanitizer_common/sanitizer_common_interceptors.inc | 14 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_platform_interceptors.h | 1 | ||||
-rw-r--r-- | test/asan/TestCases/memset_test.cc | 5 |
3 files changed, 17 insertions, 3 deletions
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors.inc b/lib/sanitizer_common/sanitizer_common_interceptors.inc index 883286209..8eaeb19dc 100644 --- a/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -3470,6 +3470,17 @@ INTERCEPTOR(void *, __aeabi_memclr8, void *block, uptr size) { #define INIT_AEABI_MEM #endif // SANITIZER_INTERCEPT_AEABI_MEM +#if SANITIZER_INTERCEPT___BZERO +DECLARE_REAL_AND_INTERCEPTOR(void *, memset, void *, int, uptr); + +INTERCEPTOR(void *, __bzero, void *block, uptr size) { + return WRAP(memset)(block, 0, size); +} +#define INIT___BZERO COMMON_INTERCEPT_FUNCTION(__bzero); +#else +#define INIT___BZERO +#endif // SANITIZER_INTERCEPT___BZERO + #define SANITIZER_COMMON_INTERCEPTORS_INIT \ INIT_TEXTDOMAIN; \ INIT_STRCMP; \ @@ -3592,5 +3603,6 @@ INTERCEPTOR(void *, __aeabi_memclr8, void *block, uptr size) { INIT_GETIFADDRS; \ INIT_IF_INDEXTONAME; \ INIT_CAPGET; \ - INIT_AEABI_MEM; + INIT_AEABI_MEM; \ + INIT___BZERO; /**/ diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h index 3e9ec1045..e87feff0a 100644 --- a/lib/sanitizer_common/sanitizer_platform_interceptors.h +++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -188,5 +188,6 @@ #define SANITIZER_INTERCEPT_IF_INDEXTONAME SI_LINUX_NOT_ANDROID || SI_MAC #define SANITIZER_INTERCEPT_CAPGET SI_LINUX_NOT_ANDROID #define SANITIZER_INTERCEPT_AEABI_MEM SI_LINUX && defined(__arm__) +#define SANITIZER_INTERCEPT___BZERO SI_MAC #endif // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H diff --git a/test/asan/TestCases/memset_test.cc b/test/asan/TestCases/memset_test.cc index 37898e143..ea7702566 100644 --- a/test/asan/TestCases/memset_test.cc +++ b/test/asan/TestCases/memset_test.cc @@ -47,11 +47,12 @@ int main(int argc, char **argv) { #if defined(TEST_MEMCPY) memcpy(q, p, 3000); // CHECK-MEMCPY: AddressSanitizer: use-after-poison on address - // CHECK-MEMCPY: in {{.*}}memcpy + // On Mac, memmove and memcpy are the same. Accept either one. + // CHECK-MEMCPY: in {{.*(memmove|memcpy)}} #elif defined(TEST_MEMMOVE) memmove(q, p, 3000); // CHECK-MEMMOVE: AddressSanitizer: use-after-poison on address - // CHECK-MEMMOVE: in {{.*}}memmove + // CHECK-MEMMOVE: in {{.*(memmove|memcpy)}} #endif assert(q[1] == 0); free(q); |