diff --git a/lib/tsan/rtl/tsan_defs.h b/lib/tsan/rtl/tsan_defs.h
index a37c0a3..c245031 100644
--- a/lib/tsan/rtl/tsan_defs.h
+++ b/lib/tsan/rtl/tsan_defs.h
@@ -154,29 +154,4 @@
 
 }  // 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/lib/tsan/rtl/tsan_interceptors.cc b/lib/tsan/rtl/tsan_interceptors.cc
index 27eb35d..3e41e7c 100644
--- a/lib/tsan/rtl/tsan_interceptors.cc
+++ b/lib/tsan/rtl/tsan_interceptors.cc
@@ -373,29 +373,21 @@
   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 @@
   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 @@
 
 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/lib/tsan/rtl/tsan_interceptors2.cc b/lib/tsan/rtl/tsan_interceptors2.cc
deleted file mode 100644
index bfa4ddc..0000000
--- a/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);
-}
