diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2012-06-29 15:19:14 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2012-06-29 15:19:14 +0000 |
commit | 5bb47a6e0e901c3934155f8481f7fe62cbd94651 (patch) | |
tree | c3c0b6745f2338a970fac73101d1a8fc1a54c98b | |
parent | 5766a9e0156771b077635395146111efe56b2c70 (diff) | |
download | bcm5719-llvm-5bb47a6e0e901c3934155f8481f7fe62cbd94651.tar.gz bcm5719-llvm-5bb47a6e0e901c3934155f8481f7fe62cbd94651.zip |
tsan: remove own memset/memcpy/memcmp (too messy)
llvm-svn: 159430
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_defs.h | 25 | ||||
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interceptors.cc | 43 | ||||
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interceptors2.cc | 35 |
3 files changed, 11 insertions, 92 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_defs.h b/compiler-rt/lib/tsan/rtl/tsan_defs.h index a37c0a3ad3d..c2450312fbf 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_defs.h +++ b/compiler-rt/lib/tsan/rtl/tsan_defs.h @@ -154,29 +154,4 @@ class StackTrace; } // namespace __tsan -extern "C" inline void *ALWAYS_INLINE -memset(void *ptr, int v, uptr size) NOTHROW { - for (uptr i = 0; i < size; i++) - ((char*)ptr)[i] = (char)v; - return ptr; -} - -extern "C" inline void *ALWAYS_INLINE -memcpy(void *dst, const void *src, uptr size) NOTHROW { - for (uptr i = 0; i < size; i++) - ((char*)dst)[i] = ((char*)src)[i]; - return dst; -} - -extern "C" inline int ALWAYS_INLINE -memcmp(const void *p1, const void *p2, uptr size) NOTHROW { - for (uptr i = 0; i < size; i++) { - if (((unsigned char*)p1)[i] < ((unsigned char*)p2)[i]) - return -1; - if (((unsigned char*)p1)[i] > ((unsigned char*)p2)[i]) - return 1; - } - return 0; -} - #endif // TSAN_DEFS_H diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc index 27eb35d4558..3e41e7c7020 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc @@ -373,29 +373,21 @@ TSAN_INTERCEPTOR(uptr, strlen, const char *s) { return len; } -DECLARE_REAL(void*, memset, void *dst, int v, uptr size); -DECLARE_REAL(void*, memcpy, void *dst, const void *src, uptr size); -DECLARE_REAL(int, memcmp, const void *s1, const void *s2, uptr n); -extern "C" void *__interceptor_memset(void *dst, int v, uptr size); -extern "C" void *__interceptor_memcpy(void *dst, const void *src, uptr size); -extern "C" int __interceptor_memcmp(const void *s1, const void *s2, uptr n); - -namespace __tsan { -void *intercept_memset(uptr callpc, void *dst, int v, uptr size) { - SCOPED_INTERCEPTOR_LIBC(memset, dst, v, size); +TSAN_INTERCEPTOR(void*, memset, void *dst, int v, uptr size) { + SCOPED_TSAN_INTERCEPTOR(memset, dst, v, size); MemoryAccessRange(thr, pc, (uptr)dst, size, true); - return REAL(memset)(dst, v, size); + return internal_memset(dst, v, size); } -void *intercept_memcpy(uptr callpc, void *dst, const void *src, uptr size) { - SCOPED_INTERCEPTOR_LIBC(memcpy, dst, src, size); +TSAN_INTERCEPTOR(void*, memcpy, void *dst, const void *src, uptr size) { + SCOPED_TSAN_INTERCEPTOR(memcpy, dst, src, size); MemoryAccessRange(thr, pc, (uptr)dst, size, true); MemoryAccessRange(thr, pc, (uptr)src, size, false); - return REAL(memcpy)(dst, src, size); + return internal_memcpy(dst, src, size); } -int intercept_memcmp(uptr callpc, const void *s1, const void *s2, uptr n) { - SCOPED_INTERCEPTOR_LIBC(memcmp, s1, s2, n); +TSAN_INTERCEPTOR(int, memcmp, const void *s1, const void *s2, uptr n) { + SCOPED_TSAN_INTERCEPTOR(memcmp, s1, s2, n); int res = 0; uptr len = 0; for (; len < n; len++) { @@ -406,7 +398,6 @@ int intercept_memcmp(uptr callpc, const void *s1, const void *s2, uptr n) { MemoryAccessRange(thr, pc, (uptr)s2, len < n ? len + 1 : n, false); return res; } -} TSAN_INTERCEPTOR(int, strcmp, const char *s1, const char *s2) { SCOPED_TSAN_INTERCEPTOR(strcmp, s1, s2); @@ -1449,25 +1440,13 @@ static void process_pending_signals(ThreadState *thr) { namespace __tsan { -// Used until we obtain real efficient functions. -static void* poormans_memset(void *dst, int v, uptr size) { - for (uptr i = 0; i < size; i++) - ((char*)dst)[i] = (char)v; - return dst; -} - -static void* poormans_memcpy(void *dst, const void *src, uptr size) { - for (uptr i = 0; i < size; i++) - ((char*)dst)[i] = ((char*)src)[i]; - return dst; -} - void InitializeInterceptors() { CHECK_GT(cur_thread()->in_rtl, 0); // We need to setup it early, because functions like dlsym() can call it. - REAL(memset) = poormans_memset; - REAL(memcpy) = poormans_memcpy; + REAL(memset) = internal_memset; + REAL(memcpy) = internal_memcpy; + REAL(memcmp) = internal_memcmp; TSAN_INTERCEPT(longjmp); TSAN_INTERCEPT(siglongjmp); diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors2.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors2.cc deleted file mode 100644 index bfa4ddcd136..00000000000 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors2.cc +++ /dev/null @@ -1,35 +0,0 @@ -//===-- tsan_interceptors2.cc ---------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file is a part of ThreadSanitizer (TSan), a race detector. -// -//===----------------------------------------------------------------------===// - -#include "interception/interception.h" -#include "sanitizer_common/sanitizer_common.h" - -namespace __tsan { - void *intercept_memset(uptr, void*, int, uptr); - void *intercept_memcpy(uptr, void*, const void*, uptr); - int intercept_memcmp(uptr, const void*, const void*, uptr); -} - -using namespace __tsan; // NOLINT - -INTERCEPTOR(void*, memset, void *dst, int v, uptr size) { - return intercept_memset((uptr)__builtin_return_address(0), dst, v, size); -} - -INTERCEPTOR(void*, memcpy, void *dst, const void *src, uptr size) { - return intercept_memcpy((uptr)__builtin_return_address(0), dst, src, size); -} - -INTERCEPTOR(int, memcmp, const void *s1, const void *s2, uptr n) { - return intercept_memcmp((uptr)__builtin_return_address(0), s1, s2, n); -} |