diff options
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_interceptors.cc')
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interceptors.cc | 59 |
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); |

