summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_interceptors.cc')
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_interceptors.cc59
1 files changed, 31 insertions, 28 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
index 9d6d3e0303e..6dd1d860e0d 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc
@@ -1051,46 +1051,43 @@ TSAN_INTERCEPTOR(int, pthread_rwlock_unlock, void *m) {
return res;
}
-// libpthread.so contains several versions of pthread_cond_init symbol.
-// When we just dlsym() it, we get the wrong (old) version.
-/*
-TSAN_INTERCEPTOR(int, pthread_cond_init, void *c, void *a) {
- SCOPED_TSAN_INTERCEPTOR(pthread_cond_init, c, a);
- int res = REAL(pthread_cond_init)(c, a);
+TSAN_INTERCEPTOR(int, pthread_cond_init_2_3_2, void *c, void *a) {
+ SCOPED_TSAN_INTERCEPTOR(pthread_cond_init_2_3_2, c, a);
+ int res = REAL(pthread_cond_init_2_3_2)(c, a);
return res;
}
-*/
-TSAN_INTERCEPTOR(int, pthread_cond_destroy, void *c) {
- SCOPED_TSAN_INTERCEPTOR(pthread_cond_destroy, c);
- int res = REAL(pthread_cond_destroy)(c);
+TSAN_INTERCEPTOR(int, pthread_cond_destroy_2_3_2, void *c) {
+ SCOPED_TSAN_INTERCEPTOR(pthread_cond_destroy_2_3_2, c);
+ int res = REAL(pthread_cond_destroy_2_3_2)(c);
return res;
}
-TSAN_INTERCEPTOR(int, pthread_cond_signal, void *c) {
- SCOPED_TSAN_INTERCEPTOR(pthread_cond_signal, c);
- int res = REAL(pthread_cond_signal)(c);
+TSAN_INTERCEPTOR(int, pthread_cond_signal_2_3_2, void *c) {
+ SCOPED_TSAN_INTERCEPTOR(pthread_cond_signal_2_3_2, c);
+ int res = REAL(pthread_cond_signal_2_3_2)(c);
return res;
}
-TSAN_INTERCEPTOR(int, pthread_cond_broadcast, void *c) {
- SCOPED_TSAN_INTERCEPTOR(pthread_cond_broadcast, c);
- int res = REAL(pthread_cond_broadcast)(c);
+TSAN_INTERCEPTOR(int, pthread_cond_broadcast_2_3_2, void *c) {
+ SCOPED_TSAN_INTERCEPTOR(pthread_cond_broadcast_2_3_2, c);
+ int res = REAL(pthread_cond_broadcast_2_3_2)(c);
return res;
}
-TSAN_INTERCEPTOR(int, pthread_cond_wait, void *c, void *m) {
- SCOPED_TSAN_INTERCEPTOR(pthread_cond_wait, c, m);
+TSAN_INTERCEPTOR(int, pthread_cond_wait_2_3_2, void *c, void *m) {
+ SCOPED_TSAN_INTERCEPTOR(pthread_cond_wait_2_3_2, c, m);
MutexUnlock(thr, pc, (uptr)m);
- int res = REAL(pthread_cond_wait)(c, m);
+ int res = REAL(pthread_cond_wait_2_3_2)(c, m);
MutexLock(thr, pc, (uptr)m);
return res;
}
-TSAN_INTERCEPTOR(int, pthread_cond_timedwait, void *c, void *m, void *abstime) {
- SCOPED_TSAN_INTERCEPTOR(pthread_cond_timedwait, c, m, abstime);
+TSAN_INTERCEPTOR(int, pthread_cond_timedwait_2_3_2, void *c, void *m,
+ void *abstime) {
+ SCOPED_TSAN_INTERCEPTOR(pthread_cond_timedwait_2_3_2, c, m, abstime);
MutexUnlock(thr, pc, (uptr)m);
- int res = REAL(pthread_cond_timedwait)(c, m, abstime);
+ int res = REAL(pthread_cond_timedwait_2_3_2)(c, m, abstime);
MutexLock(thr, pc, (uptr)m);
return res;
}
@@ -1984,12 +1981,18 @@ void InitializeInterceptors() {
TSAN_INTERCEPT(pthread_rwlock_timedwrlock);
TSAN_INTERCEPT(pthread_rwlock_unlock);
- // TSAN_INTERCEPT(pthread_cond_init);
- TSAN_INTERCEPT(pthread_cond_destroy);
- TSAN_INTERCEPT(pthread_cond_signal);
- TSAN_INTERCEPT(pthread_cond_broadcast);
- TSAN_INTERCEPT(pthread_cond_wait);
- TSAN_INTERCEPT(pthread_cond_timedwait);
+ INTERCEPT_FUNCTION_VER(pthread_cond_init, pthread_cond_init_2_3_2,
+ GLIBC_2.3.2);
+ INTERCEPT_FUNCTION_VER(pthread_cond_destroy, pthread_cond_destroy_2_3_2,
+ GLIBC_2.3.2);
+ INTERCEPT_FUNCTION_VER(pthread_cond_signal, pthread_cond_signal_2_3_2,
+ GLIBC_2.3.2);
+ INTERCEPT_FUNCTION_VER(pthread_cond_broadcast, pthread_cond_broadcast_2_3_2,
+ GLIBC_2.3.2);
+ INTERCEPT_FUNCTION_VER(pthread_cond_wait, pthread_cond_wait_2_3_2,
+ GLIBC_2.3.2);
+ INTERCEPT_FUNCTION_VER(pthread_cond_timedwait, pthread_cond_timedwait_2_3_2,
+ GLIBC_2.3.2);
TSAN_INTERCEPT(pthread_barrier_init);
TSAN_INTERCEPT(pthread_barrier_destroy);
OpenPOWER on IntegriCloud