<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Should be fixed in r252277:</div><div class=""><a href="http://lab.llvm.org:8011/builders/sanitizer_x86_64-freebsd/builds/6448" class="">http://lab.llvm.org:8011/builders/sanitizer_x86_64-freebsd/builds/6448</a></div><div class=""><br class=""></div><div class="">Kuba</div><br class=""><div class=""><blockquote type="cite" class=""><div class="">On 05 Nov 2015, at 19:33, Galina Kistanova <<a href="mailto:gkistanova@gmail.com" class="">gkistanova@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi Kuba,<br class=""><br class="">Seems like this change broke one of sanitizer builders:<br class=""><br class="">r251915:<br class=""><a href="http://lab.llvm.org:8011/builders/sanitizer_x86_64-freebsd/builds/6393" class="">http://lab.llvm.org:8011/builders/sanitizer_x86_64-freebsd/builds/6393</a><br class=""><br class="">r251916:<br class=""><a href="http://lab.llvm.org:8011/builders/sanitizer_x86_64-freebsd/builds/6395" class="">http://lab.llvm.org:8011/builders/sanitizer_x86_64-freebsd/builds/6395</a><br class=""><br class="">Please have a look at this?<br class=""><br class="">Thanks<br class=""><br class="">Galina<br class=""></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Tue, Nov 3, 2015 at 6:22 AM, Kuba Brecka via llvm-commits <span dir="ltr" class=""><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: kuba.brecka<br class="">
Date: Tue Nov  3 08:22:51 2015<br class="">
New Revision: 251916<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=251916&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=251916&view=rev</a><br class="">
Log:<br class="">
[tsan] Port TSan interceptors on OS X<br class="">
<br class="">
This patch modifies `tsan_interceptors.cc` to be buildable on OS X. Several of the intercepted methods are not available on OS X, so we need to `#if !SANITIZER_MAC` them. Plus a few other fixes, e.g. `pthread_yield` doesn't exist, let's use `internal_sched_yield` instead.<br class="">
<br class="">
This is part of an effort to port TSan to OS X, and it's one the very first steps. Don't expect TSan on OS X to actually work or pass tests at this point.<br class="">
<br class="">
Differential Revision: <a href="http://reviews.llvm.org/D14237" rel="noreferrer" target="_blank" class="">http://reviews.llvm.org/D14237</a><br class="">
<br class="">
<br class="">
<br class="">
Modified:<br class="">
    compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc<br class="">
<br class="">
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=251916&r1=251915&r2=251916&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=251916&r1=251915&r2=251916&view=diff</a><br class="">
==============================================================================<br class="">
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc (original)<br class="">
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc Tue Nov  3 08:22:51 2015<br class="">
@@ -28,16 +28,28 @@<br class="">
 #include "tsan_mman.h"<br class="">
 #include "tsan_fd.h"<br class="">
<br class="">
+#if SANITIZER_POSIX<br class="">
+#include "sanitizer_common/sanitizer_posix.h"<br class="">
+#endif<br class="">
+<br class="">
 using namespace __tsan;  // NOLINT<br class="">
<br class="">
-#if SANITIZER_FREEBSD<br class="">
+#if SANITIZER_FREEBSD || SANITIZER_MAC<br class="">
 #define __errno_location __error<br class="">
-#define __libc_realloc __realloc<br class="">
-#define __libc_calloc __calloc<br class="">
 #define stdout __stdoutp<br class="">
 #define stderr __stderrp<br class="">
 #endif<br class="">
<br class="">
+#if SANITIZER_FREEBSD<br class="">
+#define __libc_realloc __realloc<br class="">
+#define __libc_calloc __calloc<br class="">
+#elif SANITIZER_MAC<br class="">
+#define __libc_malloc REAL(malloc)<br class="">
+#define __libc_realloc REAL(realloc)<br class="">
+#define __libc_calloc REAL(calloc)<br class="">
+#define __libc_free REAL(free)<br class="">
+#endif<br class="">
+<br class="">
 #if SANITIZER_LINUX || SANITIZER_FREEBSD<br class="">
 #define PTHREAD_CREATE_DETACHED 1<br class="">
 #elif SANITIZER_MAC<br class="">
@@ -80,7 +92,6 @@ extern "C" int pthread_attr_setstacksize<br class="">
 extern "C" int pthread_key_create(unsigned *key, void (*destructor)(void* v));<br class="">
 extern "C" int pthread_setspecific(unsigned key, const void *v);<br class="">
 DECLARE_REAL(int, pthread_mutexattr_gettype, void *, void *)<br class="">
-extern "C" int pthread_yield();<br class="">
 extern "C" int pthread_sigmask(int how, const __sanitizer_sigset_t *set,<br class="">
                                __sanitizer_sigset_t *oldset);<br class="">
 // REAL(sigfillset) defined in common interceptors.<br class="">
@@ -323,6 +334,79 @@ TSAN_INTERCEPTOR(int, nanosleep, void *r<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
+TSAN_INTERCEPTOR(void*, malloc, uptr size) {<br class="">
+  if (cur_thread()->in_symbolizer)<br class="">
+    return __libc_malloc(size);<br class="">
+  void *p = 0;<br class="">
+  {<br class="">
+    SCOPED_INTERCEPTOR_RAW(malloc, size);<br class="">
+    p = user_alloc(thr, pc, size);<br class="">
+  }<br class="">
+  invoke_malloc_hook(p, size);<br class="">
+  return p;<br class="">
+}<br class="">
+<br class="">
+#if !SANITIZER_MAC<br class="">
+TSAN_INTERCEPTOR(void*, __libc_memalign, uptr align, uptr sz) {<br class="">
+  SCOPED_TSAN_INTERCEPTOR(__libc_memalign, align, sz);<br class="">
+  return user_alloc(thr, pc, sz, align);<br class="">
+}<br class="">
+#endif<br class="">
+<br class="">
+TSAN_INTERCEPTOR(void*, calloc, uptr size, uptr n) {<br class="">
+  if (cur_thread()->in_symbolizer)<br class="">
+    return __libc_calloc(size, n);<br class="">
+  void *p = 0;<br class="">
+  {<br class="">
+    SCOPED_INTERCEPTOR_RAW(calloc, size, n);<br class="">
+    p = user_calloc(thr, pc, size, n);<br class="">
+  }<br class="">
+  invoke_malloc_hook(p, n * size);<br class="">
+  return p;<br class="">
+}<br class="">
+<br class="">
+TSAN_INTERCEPTOR(void*, realloc, void *p, uptr size) {<br class="">
+  if (cur_thread()->in_symbolizer)<br class="">
+    return __libc_realloc(p, size);<br class="">
+  if (p)<br class="">
+    invoke_free_hook(p);<br class="">
+  {<br class="">
+    SCOPED_INTERCEPTOR_RAW(realloc, p, size);<br class="">
+    p = user_realloc(thr, pc, p, size);<br class="">
+  }<br class="">
+  invoke_malloc_hook(p, size);<br class="">
+  return p;<br class="">
+}<br class="">
+<br class="">
+TSAN_INTERCEPTOR(void, free, void *p) {<br class="">
+  if (p == 0)<br class="">
+    return;<br class="">
+  if (cur_thread()->in_symbolizer)<br class="">
+    return __libc_free(p);<br class="">
+  invoke_free_hook(p);<br class="">
+  SCOPED_INTERCEPTOR_RAW(free, p);<br class="">
+  user_free(thr, pc, p);<br class="">
+}<br class="">
+<br class="">
+#if !SANITIZER_MAC<br class="">
+TSAN_INTERCEPTOR(void, cfree, void *p) {<br class="">
+  if (p == 0)<br class="">
+    return;<br class="">
+  if (cur_thread()->in_symbolizer)<br class="">
+    return __libc_free(p);<br class="">
+  invoke_free_hook(p);<br class="">
+  SCOPED_INTERCEPTOR_RAW(cfree, p);<br class="">
+  user_free(thr, pc, p);<br class="">
+}<br class="">
+#endif<br class="">
+<br class="">
+#if !SANITIZER_MAC<br class="">
+TSAN_INTERCEPTOR(uptr, malloc_usable_size, void *p) {<br class="">
+  SCOPED_INTERCEPTOR_RAW(malloc_usable_size, p);<br class="">
+  return user_alloc_usable_size(p);<br class="">
+}<br class="">
+#endif<br class="">
+<br class="">
 // The sole reason tsan wraps atexit callbacks is to establish synchronization<br class="">
 // between callback setup and callback execution.<br class="">
 struct AtExitCtx {<br class="">
@@ -381,6 +465,7 @@ static void on_exit_wrapper(int status,<br class="">
   __libc_free(ctx);<br class="">
 }<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, on_exit, void(*f)(int, void*), void *arg) {<br class="">
   if (cur_thread()->in_symbolizer)<br class="">
     return 0;<br class="">
@@ -396,6 +481,7 @@ TSAN_INTERCEPTOR(int, on_exit, void(*f)(<br class="">
   ThreadIgnoreEnd(thr, pc);<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 // Cleanup old bufs.<br class="">
 static void JmpBufGarbageCollect(ThreadState *thr, uptr sp) {<br class="">
@@ -519,73 +605,6 @@ TSAN_INTERCEPTOR(void, siglongjmp, uptr<br class="">
   REAL(siglongjmp)(env, val);<br class="">
 }<br class="">
<br class="">
-TSAN_INTERCEPTOR(void*, malloc, uptr size) {<br class="">
-  if (cur_thread()->in_symbolizer)<br class="">
-    return __libc_malloc(size);<br class="">
-  void *p = 0;<br class="">
-  {<br class="">
-    SCOPED_INTERCEPTOR_RAW(malloc, size);<br class="">
-    p = user_alloc(thr, pc, size);<br class="">
-  }<br class="">
-  invoke_malloc_hook(p, size);<br class="">
-  return p;<br class="">
-}<br class="">
-<br class="">
-TSAN_INTERCEPTOR(void*, __libc_memalign, uptr align, uptr sz) {<br class="">
-  SCOPED_TSAN_INTERCEPTOR(__libc_memalign, align, sz);<br class="">
-  return user_alloc(thr, pc, sz, align);<br class="">
-}<br class="">
-<br class="">
-TSAN_INTERCEPTOR(void*, calloc, uptr size, uptr n) {<br class="">
-  if (cur_thread()->in_symbolizer)<br class="">
-    return __libc_calloc(size, n);<br class="">
-  void *p = 0;<br class="">
-  {<br class="">
-    SCOPED_INTERCEPTOR_RAW(calloc, size, n);<br class="">
-    p = user_calloc(thr, pc, size, n);<br class="">
-  }<br class="">
-  invoke_malloc_hook(p, n * size);<br class="">
-  return p;<br class="">
-}<br class="">
-<br class="">
-TSAN_INTERCEPTOR(void*, realloc, void *p, uptr size) {<br class="">
-  if (cur_thread()->in_symbolizer)<br class="">
-    return __libc_realloc(p, size);<br class="">
-  if (p)<br class="">
-    invoke_free_hook(p);<br class="">
-  {<br class="">
-    SCOPED_INTERCEPTOR_RAW(realloc, p, size);<br class="">
-    p = user_realloc(thr, pc, p, size);<br class="">
-  }<br class="">
-  invoke_malloc_hook(p, size);<br class="">
-  return p;<br class="">
-}<br class="">
-<br class="">
-TSAN_INTERCEPTOR(void, free, void *p) {<br class="">
-  if (p == 0)<br class="">
-    return;<br class="">
-  if (cur_thread()->in_symbolizer)<br class="">
-    return __libc_free(p);<br class="">
-  invoke_free_hook(p);<br class="">
-  SCOPED_INTERCEPTOR_RAW(free, p);<br class="">
-  user_free(thr, pc, p);<br class="">
-}<br class="">
-<br class="">
-TSAN_INTERCEPTOR(void, cfree, void *p) {<br class="">
-  if (p == 0)<br class="">
-    return;<br class="">
-  if (cur_thread()->in_symbolizer)<br class="">
-    return __libc_free(p);<br class="">
-  invoke_free_hook(p);<br class="">
-  SCOPED_INTERCEPTOR_RAW(cfree, p);<br class="">
-  user_free(thr, pc, p);<br class="">
-}<br class="">
-<br class="">
-TSAN_INTERCEPTOR(uptr, malloc_usable_size, void *p) {<br class="">
-  SCOPED_INTERCEPTOR_RAW(malloc_usable_size, p);<br class="">
-  return user_alloc_usable_size(p);<br class="">
-}<br class="">
-<br class="">
 TSAN_INTERCEPTOR(uptr, strlen, const char *s) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(strlen, s);<br class="">
   uptr len = internal_strlen(s);<br class="">
@@ -628,6 +647,7 @@ TSAN_INTERCEPTOR(char*, strchr, char *s,<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(char*, strchrnul, char *s, int c) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(strchrnul, s, c);<br class="">
   char *res = REAL(strchrnul)(s, c);<br class="">
@@ -635,6 +655,7 @@ TSAN_INTERCEPTOR(char*, strchrnul, char<br class="">
   READ_STRING(thr, pc, s, len);<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(char*, strrchr, char *s, int c) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(strrchr, s, c);<br class="">
@@ -692,7 +713,7 @@ TSAN_INTERCEPTOR(void*, mmap, void *addr<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(void*, mmap64, void *addr, long_t sz, int prot,<br class="">
                            int flags, int fd, u64 off) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(mmap64, addr, sz, prot, flags, fd, off);<br class="">
@@ -722,7 +743,7 @@ TSAN_INTERCEPTOR(int, munmap, void *addr<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(void*, memalign, uptr align, uptr sz) {<br class="">
   SCOPED_INTERCEPTOR_RAW(memalign, align, sz);<br class="">
   return user_alloc(thr, pc, sz, align);<br class="">
@@ -732,17 +753,19 @@ TSAN_INTERCEPTOR(void*, memalign, uptr a<br class="">
 #define TSAN_MAYBE_INTERCEPT_MEMALIGN<br class="">
 #endif<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(void*, aligned_alloc, uptr align, uptr sz) {<br class="">
   SCOPED_INTERCEPTOR_RAW(memalign, align, sz);<br class="">
   return user_alloc(thr, pc, sz, align);<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(void*, valloc, uptr sz) {<br class="">
   SCOPED_INTERCEPTOR_RAW(valloc, sz);<br class="">
   return user_alloc(thr, pc, sz, GetPageSizeCached());<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(void*, pvalloc, uptr sz) {<br class="">
   SCOPED_INTERCEPTOR_RAW(pvalloc, sz);<br class="">
   sz = RoundUp(sz, GetPageSizeCached());<br class="">
@@ -831,7 +854,7 @@ extern "C" void *__tsan_thread_start_fun<br class="">
     }<br class="">
     ThreadIgnoreEnd(thr, 0);<br class="">
     while ((tid = atomic_load(&p->tid, memory_order_acquire)) == 0)<br class="">
-      pthread_yield();<br class="">
+      internal_sched_yield();<br class="">
     ThreadStart(thr, tid, GetTid());<br class="">
     atomic_store(&p->tid, 0, memory_order_release);<br class="">
   }<br class="">
@@ -891,7 +914,7 @@ TSAN_INTERCEPTOR(int, pthread_create,<br class="">
     //    before the new thread got a chance to acquire from it in ThreadStart.<br class="">
     atomic_store(&p.tid, tid, memory_order_release);<br class="">
     while (atomic_load(&p.tid, memory_order_acquire) != 0)<br class="">
-      pthread_yield();<br class="">
+      internal_sched_yield();<br class="">
   }<br class="">
   if (attr == &myattr)<br class="">
     pthread_attr_destroy(&myattr);<br class="">
@@ -1094,6 +1117,7 @@ TSAN_INTERCEPTOR(int, pthread_mutex_tryl<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, pthread_mutex_timedlock, void *m, void *abstime) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pthread_mutex_timedlock, m, abstime);<br class="">
   int res = REAL(pthread_mutex_timedlock)(m, abstime);<br class="">
@@ -1102,7 +1126,9 @@ TSAN_INTERCEPTOR(int, pthread_mutex_time<br class="">
   }<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, pthread_spin_init, void *m, int pshared) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pthread_spin_init, m, pshared);<br class="">
   int res = REAL(pthread_spin_init)(m, pshared);<br class="">
@@ -1145,6 +1171,7 @@ TSAN_INTERCEPTOR(int, pthread_spin_unloc<br class="">
   int res = REAL(pthread_spin_unlock)(m);<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(int, pthread_rwlock_init, void *m, void *a) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_init, m, a);<br class="">
@@ -1182,6 +1209,7 @@ TSAN_INTERCEPTOR(int, pthread_rwlock_try<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, pthread_rwlock_timedrdlock, void *m, void *abstime) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_timedrdlock, m, abstime);<br class="">
   int res = REAL(pthread_rwlock_timedrdlock)(m, abstime);<br class="">
@@ -1190,6 +1218,7 @@ TSAN_INTERCEPTOR(int, pthread_rwlock_tim<br class="">
   }<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(int, pthread_rwlock_wrlock, void *m) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_wrlock, m);<br class="">
@@ -1209,6 +1238,7 @@ TSAN_INTERCEPTOR(int, pthread_rwlock_try<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, pthread_rwlock_timedwrlock, void *m, void *abstime) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_timedwrlock, m, abstime);<br class="">
   int res = REAL(pthread_rwlock_timedwrlock)(m, abstime);<br class="">
@@ -1217,6 +1247,7 @@ TSAN_INTERCEPTOR(int, pthread_rwlock_tim<br class="">
   }<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(int, pthread_rwlock_unlock, void *m) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pthread_rwlock_unlock, m);<br class="">
@@ -1225,6 +1256,7 @@ TSAN_INTERCEPTOR(int, pthread_rwlock_unl<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, pthread_barrier_init, void *b, void *a, unsigned count) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pthread_barrier_init, b, a, count);<br class="">
   MemoryWrite(thr, pc, (uptr)b, kSizeLog1);<br class="">
@@ -1250,6 +1282,7 @@ TSAN_INTERCEPTOR(int, pthread_barrier_wa<br class="">
   }<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(int, pthread_once, void *o, void (*f)()) {<br class="">
   SCOPED_INTERCEPTOR_RAW(pthread_once, o, f);<br class="">
@@ -1265,7 +1298,7 @@ TSAN_INTERCEPTOR(int, pthread_once, void<br class="">
     atomic_store(a, 2, memory_order_release);<br class="">
   } else {<br class="">
     while (v != 2) {<br class="">
-      pthread_yield();<br class="">
+      internal_sched_yield();<br class="">
       v = atomic_load(a, memory_order_acquire);<br class="">
     }<br class="">
     if (!thr->in_ignored_lib)<br class="">
@@ -1274,7 +1307,7 @@ TSAN_INTERCEPTOR(int, pthread_once, void<br class="">
   return 0;<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, __xstat, int version, const char *path, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__xstat, version, path, buf);<br class="">
   READ_STRING(thr, pc, path, 0);<br class="">
@@ -1286,7 +1319,7 @@ TSAN_INTERCEPTOR(int, __xstat, int versi<br class="">
 #endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(int, stat, const char *path, void *buf) {<br class="">
-#if SANITIZER_FREEBSD<br class="">
+#if SANITIZER_FREEBSD || SANITIZER_MAC<br class="">
   SCOPED_TSAN_INTERCEPTOR(stat, path, buf);<br class="">
   READ_STRING(thr, pc, path, 0);<br class="">
   return REAL(stat)(path, buf);<br class="">
@@ -1297,7 +1330,7 @@ TSAN_INTERCEPTOR(int, stat, const char *<br class="">
 #endif<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, __xstat64, int version, const char *path, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__xstat64, version, path, buf);<br class="">
   READ_STRING(thr, pc, path, 0);<br class="">
@@ -1308,7 +1341,7 @@ TSAN_INTERCEPTOR(int, __xstat64, int ver<br class="">
 #define TSAN_MAYBE_INTERCEPT___XSTAT64<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, stat64, const char *path, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__xstat64, 0, path, buf);<br class="">
   READ_STRING(thr, pc, path, 0);<br class="">
@@ -1319,7 +1352,7 @@ TSAN_INTERCEPTOR(int, stat64, const char<br class="">
 #define TSAN_MAYBE_INTERCEPT_STAT64<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, __lxstat, int version, const char *path, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__lxstat, version, path, buf);<br class="">
   READ_STRING(thr, pc, path, 0);<br class="">
@@ -1331,7 +1364,7 @@ TSAN_INTERCEPTOR(int, __lxstat, int vers<br class="">
 #endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(int, lstat, const char *path, void *buf) {<br class="">
-#if SANITIZER_FREEBSD<br class="">
+#if SANITIZER_FREEBSD || SANITIZER_MAC<br class="">
   SCOPED_TSAN_INTERCEPTOR(lstat, path, buf);<br class="">
   READ_STRING(thr, pc, path, 0);<br class="">
   return REAL(lstat)(path, buf);<br class="">
@@ -1342,7 +1375,7 @@ TSAN_INTERCEPTOR(int, lstat, const char<br class="">
 #endif<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, __lxstat64, int version, const char *path, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__lxstat64, version, path, buf);<br class="">
   READ_STRING(thr, pc, path, 0);<br class="">
@@ -1353,7 +1386,7 @@ TSAN_INTERCEPTOR(int, __lxstat64, int ve<br class="">
 #define TSAN_MAYBE_INTERCEPT___LXSTAT64<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, lstat64, const char *path, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__lxstat64, 0, path, buf);<br class="">
   READ_STRING(thr, pc, path, 0);<br class="">
@@ -1364,7 +1397,7 @@ TSAN_INTERCEPTOR(int, lstat64, const cha<br class="">
 #define TSAN_MAYBE_INTERCEPT_LSTAT64<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, __fxstat, int version, int fd, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__fxstat, version, fd, buf);<br class="">
   if (fd > 0)<br class="">
@@ -1377,7 +1410,7 @@ TSAN_INTERCEPTOR(int, __fxstat, int vers<br class="">
 #endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(int, fstat, int fd, void *buf) {<br class="">
-#if SANITIZER_FREEBSD<br class="">
+#if SANITIZER_FREEBSD || SANITIZER_MAC<br class="">
   SCOPED_TSAN_INTERCEPTOR(fstat, fd, buf);<br class="">
   if (fd > 0)<br class="">
     FdAccess(thr, pc, fd);<br class="">
@@ -1390,7 +1423,7 @@ TSAN_INTERCEPTOR(int, fstat, int fd, voi<br class="">
 #endif<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, __fxstat64, int version, int fd, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__fxstat64, version, fd, buf);<br class="">
   if (fd > 0)<br class="">
@@ -1402,7 +1435,7 @@ TSAN_INTERCEPTOR(int, __fxstat64, int ve<br class="">
 #define TSAN_MAYBE_INTERCEPT___FXSTAT64<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, fstat64, int fd, void *buf) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__fxstat64, 0, fd, buf);<br class="">
   if (fd > 0)<br class="">
@@ -1423,7 +1456,7 @@ TSAN_INTERCEPTOR(int, open, const char *<br class="">
   return fd;<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, open64, const char *name, int flags, int mode) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(open64, name, flags, mode);<br class="">
   READ_STRING(thr, pc, name, 0);<br class="">
@@ -1446,7 +1479,7 @@ TSAN_INTERCEPTOR(int, creat, const char<br class="">
   return fd;<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, creat64, const char *name, int mode) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(creat64, name, mode);<br class="">
   READ_STRING(thr, pc, name, 0);<br class="">
@@ -1476,6 +1509,7 @@ TSAN_INTERCEPTOR(int, dup2, int oldfd, i<br class="">
   return newfd2;<br class="">
 }<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, dup3, int oldfd, int newfd, int flags) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(dup3, oldfd, newfd, flags);<br class="">
   int newfd2 = REAL(dup3)(oldfd, newfd, flags);<br class="">
@@ -1483,8 +1517,9 @@ TSAN_INTERCEPTOR(int, dup3, int oldfd, i<br class="">
     FdDup(thr, pc, oldfd, newfd2, false);<br class="">
   return newfd2;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, eventfd, unsigned initval, int flags) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(eventfd, initval, flags);<br class="">
   int fd = REAL(eventfd)(initval, flags);<br class="">
@@ -1497,7 +1532,7 @@ TSAN_INTERCEPTOR(int, eventfd, unsigned<br class="">
 #define TSAN_MAYBE_INTERCEPT_EVENTFD<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, signalfd, int fd, void *mask, int flags) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(signalfd, fd, mask, flags);<br class="">
   if (fd >= 0)<br class="">
@@ -1512,7 +1547,7 @@ TSAN_INTERCEPTOR(int, signalfd, int fd,<br class="">
 #define TSAN_MAYBE_INTERCEPT_SIGNALFD<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, inotify_init, int fake) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(inotify_init, fake);<br class="">
   int fd = REAL(inotify_init)(fake);<br class="">
@@ -1525,7 +1560,7 @@ TSAN_INTERCEPTOR(int, inotify_init, int<br class="">
 #define TSAN_MAYBE_INTERCEPT_INOTIFY_INIT<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, inotify_init1, int flags) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(inotify_init1, flags);<br class="">
   int fd = REAL(inotify_init1)(flags);<br class="">
@@ -1579,7 +1614,7 @@ TSAN_INTERCEPTOR(int, listen, int fd, in<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, epoll_create, int size) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(epoll_create, size);<br class="">
   int fd = REAL(epoll_create)(size);<br class="">
@@ -1592,7 +1627,7 @@ TSAN_INTERCEPTOR(int, epoll_create, int<br class="">
 #define TSAN_MAYBE_INTERCEPT_EPOLL_CREATE<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, epoll_create1, int flags) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(epoll_create1, flags);<br class="">
   int fd = REAL(epoll_create1)(flags);<br class="">
@@ -1612,7 +1647,7 @@ TSAN_INTERCEPTOR(int, close, int fd) {<br class="">
   return REAL(close)(fd);<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, __close, int fd) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__close, fd);<br class="">
   if (fd >= 0)<br class="">
@@ -1625,7 +1660,7 @@ TSAN_INTERCEPTOR(int, __close, int fd) {<br class="">
 #endif<br class="">
<br class="">
 // glibc guts<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(void, __res_iclose, void *state, bool free_addr) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(__res_iclose, state, free_addr);<br class="">
   int fds[64];<br class="">
@@ -1649,6 +1684,7 @@ TSAN_INTERCEPTOR(int, pipe, int *pipefd)<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, pipe2, int *pipefd, int flags) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(pipe2, pipefd, flags);<br class="">
   int res = REAL(pipe2)(pipefd, flags);<br class="">
@@ -1656,6 +1692,7 @@ TSAN_INTERCEPTOR(int, pipe2, int *pipefd<br class="">
     FdPipeCreate(thr, pc, pipefd[0], pipefd[1]);<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 TSAN_INTERCEPTOR(long_t, send, int fd, void *buf, long_t len, int flags) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(send, fd, buf, len, flags);<br class="">
@@ -1706,7 +1743,7 @@ TSAN_INTERCEPTOR(void*, tmpfile, int fak<br class="">
   return res;<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(void*, tmpfile64, int fake) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(tmpfile64, fake);<br class="">
   void *res = REAL(tmpfile64)(fake);<br class="">
@@ -1773,7 +1810,7 @@ TSAN_INTERCEPTOR(int, closedir, void *di<br class="">
   return REAL(closedir)(dirp);<br class="">
 }<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, epoll_ctl, int epfd, int op, int fd, void *ev) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(epoll_ctl, epfd, op, fd, ev);<br class="">
   if (epfd >= 0)<br class="">
@@ -1790,7 +1827,7 @@ TSAN_INTERCEPTOR(int, epoll_ctl, int epf<br class="">
 #define TSAN_MAYBE_INTERCEPT_EPOLL_CTL<br class="">
 #endif<br class="">
<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
 TSAN_INTERCEPTOR(int, epoll_wait, int epfd, void *ev, int cnt, int timeout) {<br class="">
   SCOPED_TSAN_INTERCEPTOR(epoll_wait, epfd, ev, cnt, timeout);<br class="">
   if (epfd >= 0)<br class="">
@@ -2089,6 +2126,7 @@ TSAN_INTERCEPTOR(int, vfork, int fake) {<br class="">
   return WRAP(fork)(fake);<br class="">
 }<br class="">
<br class="">
+#if SANITIZER_LINUX<br class="">
 typedef int (*dl_iterate_phdr_cb_t)(__sanitizer_dl_phdr_info *info, SIZE_T size,<br class="">
                                     void *data);<br class="">
 struct dl_iterate_phdr_data {<br class="">
@@ -2132,6 +2170,7 @@ TSAN_INTERCEPTOR(int, dl_iterate_phdr, d<br class="">
   int res = REAL(dl_iterate_phdr)(dl_iterate_phdr_cb, &cbdata);<br class="">
   return res;<br class="">
 }<br class="">
+#endif<br class="">
<br class="">
 static int OnExit(ThreadState *thr) {<br class="">
   int status = Finalize(thr);<br class="">
@@ -2266,9 +2305,11 @@ static void HandleRecvmsg(ThreadState *t<br class="">
   MutexRepair(((TsanInterceptorContext *)ctx)->thr, \<br class="">
             ((TsanInterceptorContext *)ctx)->pc, (uptr)m)<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
 #define COMMON_INTERCEPTOR_HANDLE_RECVMSG(ctx, msg) \<br class="">
   HandleRecvmsg(((TsanInterceptorContext *)ctx)->thr, \<br class="">
       ((TsanInterceptorContext *)ctx)->pc, msg)<br class="">
+#endif<br class="">
<br class="">
 #define COMMON_INTERCEPTOR_GET_TLS_RANGE(begin, end)                           \<br class="">
   if (TsanThread *t = GetCurrentThread()) {                                    \<br class="">
@@ -2409,18 +2450,21 @@ static void unreachable() {<br class="">
 }<br class="">
<br class="">
 void InitializeInterceptors() {<br class="">
+#if !SANITIZER_MAC<br class="">
   // We need to setup it early, because functions like dlsym() can call it.<br class="">
   REAL(memset) = internal_memset;<br class="">
   REAL(memcpy) = internal_memcpy;<br class="">
+#endif<br class="">
<br class="">
   // Instruct libc malloc to consume less memory.<br class="">
-#if !SANITIZER_FREEBSD<br class="">
+#if !SANITIZER_FREEBSD && !SANITIZER_MAC<br class="">
   mallopt(1, 0);  // M_MXFAST<br class="">
   mallopt(-3, 32*1024);  // M_MMAP_THRESHOLD<br class="">
 #endif<br class="">
<br class="">
   InitializeCommonInterceptors();<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
   // We can not use TSAN_INTERCEPT to get setjmp addr,<br class="">
   // because it does &setjmp and setjmp is not present in some versions of libc.<br class="">
   using __interception::GetRealFunctionAddress;<br class="">
@@ -2428,6 +2472,7 @@ void InitializeInterceptors() {<br class="">
   GetRealFunctionAddress("_setjmp", (uptr*)&REAL(_setjmp), 0, 0);<br class="">
   GetRealFunctionAddress("sigsetjmp", (uptr*)&REAL(sigsetjmp), 0, 0);<br class="">
   GetRealFunctionAddress("__sigsetjmp", (uptr*)&REAL(__sigsetjmp), 0, 0);<br class="">
+#endif<br class="">
<br class="">
   TSAN_INTERCEPT(longjmp);<br class="">
   TSAN_INTERCEPT(siglongjmp);<br class="">
@@ -2567,9 +2612,12 @@ void InitializeInterceptors() {<br class="">
   TSAN_INTERCEPT(__cxa_atexit);<br class="">
   TSAN_INTERCEPT(_exit);<br class="">
<br class="">
+#if !SANITIZER_MAC<br class="">
   // Need to setup it, because interceptors check that the function is resolved.<br class="">
   // But atexit is emitted directly into the module, so can't be resolved.<br class="">
   REAL(atexit) = (int(*)(void(*)()))unreachable;<br class="">
+#endif<br class="">
+<br class="">
   if (REAL(__cxa_atexit)(&finalize, 0, 0)) {<br class="">
     Printf("ThreadSanitizer: failed to setup atexit callback\n");<br class="">
     Die();<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="">
</blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></body></html>