summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-07-30 12:54:34 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-07-30 12:54:34 +0000
commit807e1312611e10ac7f2c284cee89517c7fa5b697 (patch)
treedfc84f8b9a2c1d2b8cc8258410aaac9b3c8d51c2 /compiler-rt/lib
parentda9fd2560324c659900079c06411f062ba7e46bb (diff)
downloadbcm5719-llvm-807e1312611e10ac7f2c284cee89517c7fa5b697.tar.gz
bcm5719-llvm-807e1312611e10ac7f2c284cee89517c7fa5b697.zip
[msan] Intercept pthread_join.
llvm-svn: 187413
Diffstat (limited to 'compiler-rt/lib')
-rw-r--r--compiler-rt/lib/msan/msan_interceptors.cc9
-rw-r--r--compiler-rt/lib/msan/tests/msan_test.cc3
2 files changed, 10 insertions, 2 deletions
diff --git a/compiler-rt/lib/msan/msan_interceptors.cc b/compiler-rt/lib/msan/msan_interceptors.cc
index ef706e69b1f..cc055b2501d 100644
--- a/compiler-rt/lib/msan/msan_interceptors.cc
+++ b/compiler-rt/lib/msan/msan_interceptors.cc
@@ -980,6 +980,14 @@ INTERCEPTOR(int, pthread_key_create, __sanitizer_pthread_key_t *key,
return res;
}
+INTERCEPTOR(int, pthread_join, void *th, void **retval) {
+ ENSURE_MSAN_INITED();
+ int res = REAL(pthread_join)(th, retval);
+ if (!res && retval)
+ __msan_unpoison(retval, sizeof(*retval));
+ return res;
+}
+
struct MSanInterceptorContext {
bool in_interceptor_scope;
};
@@ -1223,6 +1231,7 @@ void InitializeInterceptors() {
INTERCEPT_FUNCTION(signal);
INTERCEPT_FUNCTION(pthread_create);
INTERCEPT_FUNCTION(pthread_key_create);
+ INTERCEPT_FUNCTION(pthread_join);
inited = 1;
}
} // namespace __msan
diff --git a/compiler-rt/lib/msan/tests/msan_test.cc b/compiler-rt/lib/msan/tests/msan_test.cc
index 1890db2b991..09000343b16 100644
--- a/compiler-rt/lib/msan/tests/msan_test.cc
+++ b/compiler-rt/lib/msan/tests/msan_test.cc
@@ -2059,8 +2059,7 @@ TEST(MemorySanitizer, SimpleThread) {
EXPECT_NOT_POISONED(t);
res = pthread_join(t, &p);
assert(!res);
- if (!__msan_has_dynamic_component()) // FIXME: intercept pthread_join (?).
- __msan_unpoison(&p, sizeof(p));
+ EXPECT_NOT_POISONED(p);
delete (int*)p;
}
OpenPOWER on IntegriCloud