summaryrefslogtreecommitdiffstats
path: root/compiler-rt
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2013-08-13 16:51:27 +0000
committerDmitry Vyukov <dvyukov@google.com>2013-08-13 16:51:27 +0000
commit8cff61f29efee104f14f6e8ff06bdcbc71a5fcf8 (patch)
tree074ea10671abc26869b82dd167ca068c100b5a69 /compiler-rt
parent9dc34adf3603501bd0580fc4031bf4798f7a4564 (diff)
downloadbcm5719-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.cc15
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);
OpenPOWER on IntegriCloud