summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2012-06-29 15:19:14 +0000
committerDmitry Vyukov <dvyukov@google.com>2012-06-29 15:19:14 +0000
commit5bb47a6e0e901c3934155f8481f7fe62cbd94651 (patch)
treec3c0b6745f2338a970fac73101d1a8fc1a54c98b
parent5766a9e0156771b077635395146111efe56b2c70 (diff)
downloadbcm5719-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.h25
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_interceptors.cc43
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_interceptors2.cc35
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);
-}
OpenPOWER on IntegriCloud