diff options
Diffstat (limited to 'compiler-rt/lib/tsan')
| -rw-r--r-- | compiler-rt/lib/tsan/lit_tests/race_on_write.cc | 39 | ||||
| -rw-r--r-- | compiler-rt/lib/tsan/lit_tests/thread_name.cc | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interceptors.cc | 30 | ||||
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_stat.cc | 1 | ||||
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_stat.h | 1 |
5 files changed, 30 insertions, 44 deletions
diff --git a/compiler-rt/lib/tsan/lit_tests/race_on_write.cc b/compiler-rt/lib/tsan/lit_tests/race_on_write.cc deleted file mode 100644 index f1b0bb1cbd6..00000000000 --- a/compiler-rt/lib/tsan/lit_tests/race_on_write.cc +++ /dev/null @@ -1,39 +0,0 @@ -// RUN: %clangxx_tsan -O1 %s -o %t && %t 2>&1 | FileCheck %s -#include <pthread.h> -#include <stdio.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> - -int fd; -char buf; - -void *Thread1(void *x) { - buf = 1; - sleep(1); - return NULL; -} - -void *Thread2(void *x) { - write(fd, &buf, 1); - return NULL; -} - -int main() { - fd = open("/dev/null", O_WRONLY); - if (fd < 0) return 1; - pthread_t t[2]; - pthread_create(&t[0], NULL, Thread1, NULL); - sleep(1); - pthread_create(&t[1], NULL, Thread2, NULL); - pthread_join(t[0], NULL); - pthread_join(t[1], NULL); - close(fd); -} - -// CHECK: WARNING: ThreadSanitizer: data race -// CHECK: Read of size 1 -// CHECK: #0 write -// CHECK: Previous write of size 1 -// CHECK: #0 Thread1 diff --git a/compiler-rt/lib/tsan/lit_tests/thread_name.cc b/compiler-rt/lib/tsan/lit_tests/thread_name.cc index 0ca0b176997..9a86f4f29ed 100644 --- a/compiler-rt/lib/tsan/lit_tests/thread_name.cc +++ b/compiler-rt/lib/tsan/lit_tests/thread_name.cc @@ -15,7 +15,8 @@ void *Thread1(void *x) { } void *Thread2(void *x) { - pthread_setname_np(pthread_self(), "Thread2"); + AnnotateThreadName(__FILE__, __LINE__, "Thread2"); + // TODO: pthread_setname_np(pthread_self(), "Thread2"); Global--; return NULL; } diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc index 5d94e4200eb..e246d2be99d 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc @@ -1259,6 +1259,30 @@ TSAN_INTERCEPTOR(long_t, preadv64, int fd, void *vec, int cnt, u64 off) { return res; } +TSAN_INTERCEPTOR(long_t, write, int fd, void *buf, long_t sz) { + SCOPED_TSAN_INTERCEPTOR(write, fd, buf, sz); + if (fd >= 0) + FdRelease(thr, pc, fd); + int res = REAL(write)(fd, buf, sz); + return res; +} + +TSAN_INTERCEPTOR(long_t, pwrite, int fd, void *buf, long_t sz, unsigned off) { + SCOPED_TSAN_INTERCEPTOR(pwrite, fd, buf, sz, off); + if (fd >= 0) + FdRelease(thr, pc, fd); + int res = REAL(pwrite)(fd, buf, sz, off); + return res; +} + +TSAN_INTERCEPTOR(long_t, pwrite64, int fd, void *buf, long_t sz, u64 off) { + SCOPED_TSAN_INTERCEPTOR(pwrite64, fd, buf, sz, off); + if (fd >= 0) + FdRelease(thr, pc, fd); + int res = REAL(pwrite64)(fd, buf, sz, off); + return res; +} + TSAN_INTERCEPTOR(long_t, writev, int fd, void *vec, int cnt) { SCOPED_TSAN_INTERCEPTOR(writev, fd, vec, cnt); if (fd >= 0) @@ -1599,10 +1623,9 @@ TSAN_INTERCEPTOR(int, fork, int fake) { #define COMMON_INTERCEPTOR_READ_RANGE(ptr, size) \ MemoryAccessRange(thr, pc, (uptr)ptr, size, false) #define COMMON_INTERCEPTOR_ENTER(func, ...) \ - SCOPED_TSAN_INTERCEPTOR(func, __VA_ARGS__) + SCOPED_TSAN_INTERCEPTOR(func, __VA_ARGS__) #define COMMON_INTERCEPTOR_FD_ACQUIRE(fd) FdAcquire(thr, pc, fd) #define COMMON_INTERCEPTOR_FD_RELEASE(fd) FdRelease(thr, pc, fd) -#define COMMON_INTERCEPTOR_SET_THREAD_NAME(name) ThreadSetName(thr, name) #include "sanitizer_common/sanitizer_common_interceptors.h" namespace __tsan { @@ -1775,6 +1798,9 @@ void InitializeInterceptors() { TSAN_INTERCEPT(readv); TSAN_INTERCEPT(preadv64); + TSAN_INTERCEPT(write); + TSAN_INTERCEPT(pwrite); + TSAN_INTERCEPT(pwrite64); TSAN_INTERCEPT(writev); TSAN_INTERCEPT(pwritev64); TSAN_INTERCEPT(send); diff --git a/compiler-rt/lib/tsan/rtl/tsan_stat.cc b/compiler-rt/lib/tsan/rtl/tsan_stat.cc index 7c205315f15..645e1d0f5fc 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_stat.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_stat.cc @@ -204,7 +204,6 @@ void StatOutput(u64 *stat) { name[StatInt_pipe] = " pipe "; name[StatInt_pipe2] = " pipe2 "; name[StatInt_read] = " read "; - name[StatInt_prctl] = " prctl "; name[StatInt_pread] = " pread "; name[StatInt_pread64] = " pread64 "; name[StatInt_readv] = " readv "; diff --git a/compiler-rt/lib/tsan/rtl/tsan_stat.h b/compiler-rt/lib/tsan/rtl/tsan_stat.h index d9e430eaefd..397e6ee4675 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_stat.h +++ b/compiler-rt/lib/tsan/rtl/tsan_stat.h @@ -199,7 +199,6 @@ enum StatType { StatInt_pipe, StatInt_pipe2, StatInt_read, - StatInt_prctl, StatInt_pread, StatInt_pread64, StatInt_readv, |

