summaryrefslogtreecommitdiffstats
path: root/compiler-rt
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2015-12-09 22:32:38 +0000
committerYabin Cui <yabinc@google.com>2015-12-09 22:32:38 +0000
commit4ddbe8508a0bb7b3b5bcf892034594a29292bd36 (patch)
treee390c4a1eaaa60df6aef3031c9d0fbee73aac18d /compiler-rt
parent02b8e94943ca216ca9df313fd076c3e7a2d29448 (diff)
downloadbcm5719-llvm-4ddbe8508a0bb7b3b5bcf892034594a29292bd36.tar.gz
bcm5719-llvm-4ddbe8508a0bb7b3b5bcf892034594a29292bd36.zip
[tsan] Use REAL(malloc) instead of __libc_malloc for Android.
Summary: Android doesn't have __libc_malloc and related allocation functions. As its dynamic linker doesn't use malloc, so we can use REAL(malloc) to replace __libc_malloc safely. Reviewers: kcc, eugenis, dvyukov Subscribers: llvm-commits, tberghammer, danalbert, srhines Differential Revision: http://reviews.llvm.org/D15297 llvm-svn: 255167
Diffstat (limited to 'compiler-rt')
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_interceptors.cc11
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_new_delete.cc2
2 files changed, 11 insertions, 2 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
index f2c28de1eda..91dc8c65fa3 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
@@ -48,6 +48,13 @@ using namespace __tsan; // NOLINT
#define __libc_realloc REAL(realloc)
#define __libc_calloc REAL(calloc)
#define __libc_free REAL(free)
+#elif SANITIZER_ANDROID
+#define __errno_location __errno
+#define __libc_malloc REAL(malloc)
+#define __libc_realloc REAL(realloc)
+#define __libc_calloc REAL(calloc)
+#define __libc_free REAL(free)
+#define mallopt(a, b)
#endif
#if SANITIZER_LINUX || SANITIZER_FREEBSD
@@ -105,10 +112,12 @@ extern "C" void *pthread_self();
extern "C" void _exit(int status);
extern "C" int *__errno_location();
extern "C" int fileno_unlocked(void *stream);
+#if !SANITIZER_ANDROID
extern "C" void *__libc_calloc(uptr size, uptr n);
extern "C" void *__libc_realloc(void *ptr, uptr size);
+#endif
extern "C" int dirfd(void *dirp);
-#if !SANITIZER_FREEBSD
+#if !SANITIZER_FREEBSD && !SANITIZER_ANDROID
extern "C" int mallopt(int param, int value);
#endif
extern __sanitizer_FILE *stdout, *stderr;
diff --git a/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc b/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc
index ecbdb62b013..ebb422cf202 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc
@@ -23,7 +23,7 @@ struct nothrow_t {};
DECLARE_REAL(void *, malloc, uptr size)
DECLARE_REAL(void, free, void *ptr)
-#if SANITIZER_MAC
+#if SANITIZER_MAC || SANITIZER_ANDROID
#define __libc_malloc REAL(malloc)
#define __libc_free REAL(free)
#endif
OpenPOWER on IntegriCloud