summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2014-03-27 14:20:34 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2014-03-27 14:20:34 +0000
commitf88ba4ccd33263ff0bdab25654ac2923d59f091c (patch)
treef0a2b656cef152b87790e83f26e2f43342167157
parent81ca90693b8729be48de24371cee242b8d2945e9 (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.inc14
-rw-r--r--lib/sanitizer_common/sanitizer_platform_interceptors.h1
-rw-r--r--test/asan/TestCases/memset_test.cc5
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);