diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2013-08-13 16:51:27 +0000 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2013-08-13 16:51:27 +0000 |
| commit | 8cff61f29efee104f14f6e8ff06bdcbc71a5fcf8 (patch) | |
| tree | 074ea10671abc26869b82dd167ca068c100b5a69 /compiler-rt | |
| parent | 9dc34adf3603501bd0580fc4031bf4798f7a4564 (diff) | |
| download | bcm5719-llvm-8cff61f29efee104f14f6e8ff06bdcbc71a5fcf8.tar.gz bcm5719-llvm-8cff61f29efee104f14f6e8ff06bdcbc71a5fcf8.zip | |
tsan: intercept getaddrinfo
This is necessary to prevent false positives, see:
https://code.google.com/p/thread-sanitizer/issues/detail?id=25
llvm-svn: 188291
Diffstat (limited to 'compiler-rt')
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interceptors.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc index ad69de0e74b..9d6d3e0303e 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc @@ -1735,6 +1735,20 @@ TSAN_INTERCEPTOR(int, gettimeofday, void *tv, void *tz) { return REAL(gettimeofday)(tv, tz); } +TSAN_INTERCEPTOR(int, getaddrinfo, void *node, void *service, + void *hints, void *rv) { + SCOPED_TSAN_INTERCEPTOR(getaddrinfo, node, service, hints, rv); + // We miss atomic synchronization in getaddrinfo, + // and can report false race between malloc and free + // inside of getaddrinfo. So ignore memory accesses. + IgnoreCtl(thr, true, true); + IgnoreCtl(thr, false, true); + int res = REAL(getaddrinfo)(node, service, hints, rv); + IgnoreCtl(thr, true, false); + IgnoreCtl(thr, false, false); + return res; +} + // Linux kernel has a bug that leads to kernel deadlock if a process // maps TBs of memory and then calls mlock(). static void MlockIsUnsupported() { @@ -2056,6 +2070,7 @@ void InitializeInterceptors() { TSAN_INTERCEPT(usleep); TSAN_INTERCEPT(nanosleep); TSAN_INTERCEPT(gettimeofday); + TSAN_INTERCEPT(getaddrinfo); TSAN_INTERCEPT(mlock); TSAN_INTERCEPT(munlock); |

