[compiler-rt] r353385 - tsan: Implement pthread_exit() interceptor for Thread sanitizer
Dmitry Vyukov via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 7 02:46:02 PST 2019
Author: dvyukov
Date: Thu Feb 7 02:46:02 2019
New Revision: 353385
URL: http://llvm.org/viewvc/llvm-project?rev=353385&view=rev
Log:
tsan: Implement pthread_exit() interceptor for Thread sanitizer
This change is preparation for fiber support.
Author: yuri (Yuri Per)
Reviewed in: https://reviews.llvm.org/D57876
Context: https://reviews.llvm.org/D54889
Added:
compiler-rt/trunk/test/tsan/thread_exit.c
Modified:
compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=353385&r1=353384&r2=353385&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc Thu Feb 7 02:46:02 2019
@@ -1050,6 +1050,11 @@ TSAN_INTERCEPTOR(int, pthread_detach, vo
return res;
}
+TSAN_INTERCEPTOR(void, pthread_exit, void *retval) {
+ SCOPED_TSAN_INTERCEPTOR(pthread_exit, retval);
+ REAL(pthread_exit)(retval);
+}
+
#if SANITIZER_LINUX
TSAN_INTERCEPTOR(int, pthread_tryjoin_np, void *th, void **ret) {
SCOPED_TSAN_INTERCEPTOR(pthread_tryjoin_np, th, ret);
@@ -2664,6 +2669,7 @@ void InitializeInterceptors() {
TSAN_INTERCEPT(pthread_create);
TSAN_INTERCEPT(pthread_join);
TSAN_INTERCEPT(pthread_detach);
+ TSAN_INTERCEPT(pthread_exit);
#if SANITIZER_LINUX
TSAN_INTERCEPT(pthread_tryjoin_np);
TSAN_INTERCEPT(pthread_timedjoin_np);
Added: compiler-rt/trunk/test/tsan/thread_exit.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/thread_exit.c?rev=353385&view=auto
==============================================================================
--- compiler-rt/trunk/test/tsan/thread_exit.c (added)
+++ compiler-rt/trunk/test/tsan/thread_exit.c Thu Feb 7 02:46:02 2019
@@ -0,0 +1,25 @@
+// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
+#include "test.h"
+
+int var;
+
+void *Thread(void *x) {
+ pthread_exit(&var);
+ return 0;
+}
+
+int main() {
+ pthread_t t;
+ pthread_create(&t, 0, Thread, 0);
+ void *retval = 0;
+ pthread_join(t, &retval);
+ if (retval != &var) {
+ fprintf(stderr, "Unexpected return value\n");
+ exit(1);
+ }
+ fprintf(stderr, "PASS\n");
+ return 0;
+}
+
+// CHECK-NOT: WARNING: ThreadSanitizer:
+// CHECK: PASS
More information about the llvm-commits
mailing list