diff options
author | Kuba Brecka <kuba.brecka@gmail.com> | 2015-11-18 14:50:40 +0000 |
---|---|---|
committer | Kuba Brecka <kuba.brecka@gmail.com> | 2015-11-18 14:50:40 +0000 |
commit | b2b07aa9257ccd42738c1a80a54b093476c4fafa (patch) | |
tree | 82c2b20e02b2dd3dc7260b738c9e5ccb08ae61c1 | |
parent | 7310c68e857b8f9f3094695775d7ce3a7708cfe5 (diff) | |
download | bcm5719-llvm-b2b07aa9257ccd42738c1a80a54b093476c4fafa.tar.gz bcm5719-llvm-b2b07aa9257ccd42738c1a80a54b093476c4fafa.zip |
[tsan] Skip malloc/free interceptors when we're inside symbolizer on OS X
Symbolizers can call malloc/realloc/free/..., which we don't want to intercept. This is already implemented on Linux, let's do it for OS X as well.
Differential Revision: http://reviews.llvm.org/D14710
llvm-svn: 253460
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_malloc_mac.cc | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_malloc_mac.cc b/compiler-rt/lib/tsan/rtl/tsan_malloc_mac.cc index 6319fdf6030..087392f5741 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_malloc_mac.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_malloc_mac.cc @@ -28,20 +28,30 @@ using namespace __tsan; void *p = \ user_alloc(cur_thread(), StackTrace::GetCurrentPc(), size, alignment) #define COMMON_MALLOC_MALLOC(size) \ + if (cur_thread()->in_symbolizer) \ + return REAL(malloc)(size); \ SCOPED_INTERCEPTOR_RAW(malloc, size); \ void *p = user_alloc(thr, pc, size) -#define COMMON_MALLOC_REALLOC(ptr, size) \ +#define COMMON_MALLOC_REALLOC(ptr, size) \ + if (cur_thread()->in_symbolizer) \ + return REAL(realloc)(ptr, size); \ SCOPED_INTERCEPTOR_RAW(realloc, ptr, size); \ - void *p = user_realloc(thr, pc, ptr, size); -#define COMMON_MALLOC_CALLOC(count, size) \ + void *p = user_realloc(thr, pc, ptr, size) +#define COMMON_MALLOC_CALLOC(count, size) \ + if (cur_thread()->in_symbolizer) \ + return REAL(calloc)(count, size); \ SCOPED_INTERCEPTOR_RAW(calloc, size, count); \ - void *p = user_calloc(thr, pc, size, count); -#define COMMON_MALLOC_VALLOC(size) \ - SCOPED_INTERCEPTOR_RAW(valloc, size); \ - void *p = user_alloc(thr, pc, size, GetPageSizeCached()); -#define COMMON_MALLOC_FREE(ptr) \ + void *p = user_calloc(thr, pc, size, count) +#define COMMON_MALLOC_VALLOC(size) \ + if (cur_thread()->in_symbolizer) \ + return REAL(valloc)(size); \ + SCOPED_INTERCEPTOR_RAW(valloc, size); \ + void *p = user_alloc(thr, pc, size, GetPageSizeCached()) +#define COMMON_MALLOC_FREE(ptr) \ + if (cur_thread()->in_symbolizer) \ + return REAL(free)(ptr); \ SCOPED_INTERCEPTOR_RAW(free, ptr); \ - user_free(thr, pc, ptr); + user_free(thr, pc, ptr) #define COMMON_MALLOC_SIZE(ptr) \ uptr size = user_alloc_usable_size(ptr); #define COMMON_MALLOC_FILL_STATS(zone, stats) |