diff options
| -rw-r--r-- | compiler-rt/lib/asan/asan_intercepted_functions.h | 9 | ||||
| -rw-r--r-- | compiler-rt/lib/asan/asan_interceptors.cc | 33 | ||||
| -rw-r--r-- | compiler-rt/lib/asan/tests/asan_test.cc | 46 | ||||
| -rw-r--r-- | compiler-rt/lib/msan/msan_interceptors.cc | 38 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.h | 77 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h | 19 | ||||
| -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 |
11 files changed, 128 insertions, 168 deletions
diff --git a/compiler-rt/lib/asan/asan_intercepted_functions.h b/compiler-rt/lib/asan/asan_intercepted_functions.h index 25eec8b5d14..1d82940530e 100644 --- a/compiler-rt/lib/asan/asan_intercepted_functions.h +++ b/compiler-rt/lib/asan/asan_intercepted_functions.h @@ -42,8 +42,10 @@ using __sanitizer::uptr; #if defined(__linux__) # define ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX 1 +# define ASAN_INTERCEPT_PRCTL 1 #else # define ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX 0 +# define ASAN_INTERCEPT_PRCTL 0 #endif #if !defined(__APPLE__) @@ -165,13 +167,6 @@ DECLARE_FUNCTION_AND_WRAPPER(SSIZE_T, pread64, int fd, void *buf, SIZE_T count, OFF64_T offset); # endif -#if SANITIZER_INTERCEPT_WRITE -DECLARE_FUNCTION_AND_WRAPPER(SSIZE_T, write, int fd, void *ptr, SIZE_T count); -#endif -#if SANITIZER_INTERCEPT_PWRITE -DECLARE_FUNCTION_AND_WRAPPER(SSIZE_T, pwrite, int fd, void *ptr, SIZE_T count); -#endif - # if ASAN_INTERCEPT_MLOCKX // mlock/munlock DECLARE_FUNCTION_AND_WRAPPER(int, mlock, const void *addr, SIZE_T len); diff --git a/compiler-rt/lib/asan/asan_interceptors.cc b/compiler-rt/lib/asan/asan_interceptors.cc index f59a7952742..ef0fde340dd 100644 --- a/compiler-rt/lib/asan/asan_interceptors.cc +++ b/compiler-rt/lib/asan/asan_interceptors.cc @@ -75,12 +75,6 @@ static inline uptr MaybeRealStrnlen(const char *s, uptr maxlen) { return internal_strnlen(s, maxlen); } -static void SetThreadName(const char *name) { - AsanThread *t = asanThreadRegistry().GetCurrent(); - if (t) - t->summary()->set_name(name); -} - } // namespace __asan // ---------------------- Wrappers ---------------- {{{1 @@ -89,9 +83,8 @@ using namespace __asan; // NOLINT #define COMMON_INTERCEPTOR_WRITE_RANGE(ptr, size) ASAN_WRITE_RANGE(ptr, size) #define COMMON_INTERCEPTOR_READ_RANGE(ptr, size) ASAN_READ_RANGE(ptr, size) #define COMMON_INTERCEPTOR_ENTER(func, ...) ENSURE_ASAN_INITED() -#define COMMON_INTERCEPTOR_FD_ACQUIRE(fd) do { } while (false) -#define COMMON_INTERCEPTOR_FD_RELEASE(fd) do { } while (false) -#define COMMON_INTERCEPTOR_SET_THREAD_NAME(name) SetThreadName(name) +#define COMMON_INTERCEPTOR_FD_ACQUIRE(fd) +#define COMMON_INTERCEPTOR_FD_RELEASE(fd) #include "sanitizer_common/sanitizer_common_interceptors.h" static thread_return_t THREAD_CALLING_CONV asan_thread_start(void *arg) { @@ -187,6 +180,25 @@ INTERCEPTOR(void, siglongjmp, void *env, int val) { } #endif +#if ASAN_INTERCEPT_PRCTL +#define PR_SET_NAME 15 +INTERCEPTOR(int, prctl, int option, + unsigned long arg2, unsigned long arg3, // NOLINT + unsigned long arg4, unsigned long arg5) { // NOLINT + int res = REAL(prctl(option, arg2, arg3, arg4, arg5)); + if (option == PR_SET_NAME) { + AsanThread *t = asanThreadRegistry().GetCurrent(); + if (t) { + char buff[17]; + internal_strncpy(buff, (char*)arg2, 16); + buff[16] = 0; + t->summary()->set_name(buff); + } + } + return res; +} +#endif + #if ASAN_INTERCEPT___CXA_THROW INTERCEPTOR(void, __cxa_throw, void *a, void *b, void *c) { CHECK(REAL(__cxa_throw)); @@ -733,6 +745,9 @@ void InitializeAsanInterceptors() { #if ASAN_INTERCEPT_SIGLONGJMP ASAN_INTERCEPT_FUNC(siglongjmp); #endif +#if ASAN_INTERCEPT_PRCTL + ASAN_INTERCEPT_FUNC(prctl); +#endif // Intercept exception handling functions. #if ASAN_INTERCEPT___CXA_THROW diff --git a/compiler-rt/lib/asan/tests/asan_test.cc b/compiler-rt/lib/asan/tests/asan_test.cc index ef7846dbc0d..f9abc31ae51 100644 --- a/compiler-rt/lib/asan/tests/asan_test.cc +++ b/compiler-rt/lib/asan/tests/asan_test.cc @@ -1667,30 +1667,44 @@ TEST(AddressSanitizer, DISABLED_MemIntrinsicCallByPointerTest) { CallMemTransferByPointer(&memmove); } -#if defined(__linux__) && !defined(ANDROID) -#define READ_TEST(READ_N_BYTES) \ - char *x = new char[10]; \ - int fd = open("/proc/self/stat", O_RDONLY); \ - ASSERT_GT(fd, 0); \ - EXPECT_DEATH(READ_N_BYTES, \ - ASAN_PCRE_DOTALL \ - "AddressSanitizer: heap-buffer-overflow" \ - ".* is located 0 bytes to the right of 10-byte region"); \ - close(fd); \ - delete [] x; \ - +#if defined(__linux__) && !defined(ANDROID) && !defined(__ANDROID__) TEST(AddressSanitizer, pread) { - READ_TEST(pread(fd, x, 15, 0)); + char *x = new char[10]; + int fd = open("/proc/self/stat", O_RDONLY); + ASSERT_GT(fd, 0); + EXPECT_DEATH(pread(fd, x, 15, 0), + ASAN_PCRE_DOTALL + "AddressSanitizer: heap-buffer-overflow" + ".* is located 0 bytes to the right of 10-byte region"); + close(fd); + delete [] x; } TEST(AddressSanitizer, pread64) { - READ_TEST(pread64(fd, x, 15, 0)); + char *x = new char[10]; + int fd = open("/proc/self/stat", O_RDONLY); + ASSERT_GT(fd, 0); + EXPECT_DEATH(pread64(fd, x, 15, 0), + ASAN_PCRE_DOTALL + "AddressSanitizer: heap-buffer-overflow" + ".* is located 0 bytes to the right of 10-byte region"); + close(fd); + delete [] x; } TEST(AddressSanitizer, read) { - READ_TEST(read(fd, x, 15)); + char *x = new char[10]; + int fd = open("/proc/self/stat", O_RDONLY); + ASSERT_GT(fd, 0); + EXPECT_DEATH(read(fd, x, 15), + ASAN_PCRE_DOTALL + "AddressSanitizer: heap-buffer-overflow" + ".* is located 0 bytes to the right of 10-byte region"); + close(fd); + delete [] x; } -#endif // defined(__linux__) && !defined(ANDROID) + +#endif // defined(__linux__) && !defined(ANDROID) && !defined(__ANDROID__) // This test case fails // Clang optimizes memcpy/memset calls which lead to unaligned access diff --git a/compiler-rt/lib/msan/msan_interceptors.cc b/compiler-rt/lib/msan/msan_interceptors.cc index a739d16e471..e108156772c 100644 --- a/compiler-rt/lib/msan/msan_interceptors.cc +++ b/compiler-rt/lib/msan/msan_interceptors.cc @@ -67,6 +67,30 @@ INTERCEPTOR(SIZE_T, fread_unlocked, void *ptr, SIZE_T size, SIZE_T nmemb, return res; } +INTERCEPTOR(SSIZE_T, read, int fd, void *ptr, SIZE_T count) { + ENSURE_MSAN_INITED(); + SSIZE_T res = REAL(read)(fd, ptr, count); + if (res > 0) + __msan_unpoison(ptr, res); + return res; +} + +INTERCEPTOR(SSIZE_T, pread, int fd, void *ptr, SIZE_T count, OFF_T offset) { + ENSURE_MSAN_INITED(); + SSIZE_T res = REAL(pread)(fd, ptr, count, offset); + if (res > 0) + __msan_unpoison(ptr, res); + return res; +} + +INTERCEPTOR(SSIZE_T, pread64, int fd, void *ptr, SIZE_T count, OFF64_T offset) { + ENSURE_MSAN_INITED(); + SSIZE_T res = REAL(pread64)(fd, ptr, count, offset); + if (res > 0) + __msan_unpoison(ptr, res); + return res; +} + INTERCEPTOR(SSIZE_T, readlink, const char *path, char *buf, SIZE_T bufsiz) { ENSURE_MSAN_INITED(); SSIZE_T res = REAL(readlink)(path, buf, bufsiz); @@ -735,15 +759,6 @@ INTERCEPTOR(int, getrusage, int who, void *usage) { return res; } -#define COMMON_INTERCEPTOR_WRITE_RANGE(ptr, size) \ - __msan_unpoison(ptr, size) -#define COMMON_INTERCEPTOR_READ_RANGE(ptr, size) do { } while (false) -#define COMMON_INTERCEPTOR_ENTER(func, ...) ENSURE_MSAN_INITED() -#define COMMON_INTERCEPTOR_FD_ACQUIRE(fd) do { } while (false) -#define COMMON_INTERCEPTOR_FD_RELEASE(fd) do { } while (false) -#define COMMON_INTERCEPTOR_SET_THREAD_NAME(name) do { } while (false) // FIXME -#include "sanitizer_common/sanitizer_common_interceptors.h" - // static void *fast_memset(void *ptr, int c, SIZE_T n) { // hack until we have a really fast internal_memset @@ -853,8 +868,6 @@ namespace __msan { void InitializeInterceptors() { static int inited = 0; CHECK_EQ(inited, 0); - SANITIZER_COMMON_INTERCEPTORS_INIT; - INTERCEPT_FUNCTION(mmap); INTERCEPT_FUNCTION(mmap64); INTERCEPT_FUNCTION(posix_memalign); @@ -864,6 +877,9 @@ void InitializeInterceptors() { INTERCEPT_FUNCTION(free); INTERCEPT_FUNCTION(fread); INTERCEPT_FUNCTION(fread_unlocked); + INTERCEPT_FUNCTION(read); + INTERCEPT_FUNCTION(pread); + INTERCEPT_FUNCTION(pread64); INTERCEPT_FUNCTION(readlink); INTERCEPT_FUNCTION(readdir); INTERCEPT_FUNCTION(memcpy); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.h index c213caaeceb..312e659b9b3 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.h @@ -17,7 +17,6 @@ // COMMON_INTERCEPTOR_WRITE_RANGE // COMMON_INTERCEPTOR_FD_ACQUIRE // COMMON_INTERCEPTOR_FD_RELEASE -// COMMON_INTERCEPTOR_SET_THREAD_NAME //===----------------------------------------------------------------------===// #ifndef SANITIZER_COMMON_INTERCEPTORS_H #define SANITIZER_COMMON_INTERCEPTORS_H @@ -35,9 +34,6 @@ INTERCEPTOR(SSIZE_T, read, int fd, void *ptr, SIZE_T count) { COMMON_INTERCEPTOR_FD_ACQUIRE(fd); return res; } -# define INIT_READ INTERCEPT_FUNCTION(read) -#else -# define INIT_READ #endif #if SANITIZER_INTERCEPT_PREAD @@ -50,9 +46,6 @@ INTERCEPTOR(SSIZE_T, pread, int fd, void *ptr, SIZE_T count, OFF_T offset) { COMMON_INTERCEPTOR_FD_ACQUIRE(fd); return res; } -# define INIT_PREAD INTERCEPT_FUNCTION(pread) -#else -# define INIT_PREAD #endif #if SANITIZER_INTERCEPT_PREAD64 @@ -65,81 +58,29 @@ INTERCEPTOR(SSIZE_T, pread64, int fd, void *ptr, SIZE_T count, OFF64_T offset) { COMMON_INTERCEPTOR_FD_ACQUIRE(fd); return res; } -# define INIT_PREAD64 INTERCEPT_FUNCTION(pread64) -#else -# define INIT_PREAD64 #endif -#if SANITIZER_INTERCEPT_WRITE -INTERCEPTOR(SSIZE_T, write, int fd, void *ptr, SIZE_T count) { - COMMON_INTERCEPTOR_ENTER(write, fd, ptr, count); - if (fd >= 0) - COMMON_INTERCEPTOR_FD_RELEASE(fd); - SSIZE_T res = REAL(write)(fd, ptr, count); - if (res > 0) - COMMON_INTERCEPTOR_READ_RANGE(ptr, res); - return res; -} -# define INIT_WRITE INTERCEPT_FUNCTION(write) +#if SANITIZER_INTERCEPT_READ +# define INIT_READ INTERCEPT_FUNCTION(read) #else -# define INIT_WRITE +# define INIT_READ #endif -#if SANITIZER_INTERCEPT_PWRITE -INTERCEPTOR(SSIZE_T, pwrite, int fd, void *ptr, SIZE_T count) { - COMMON_INTERCEPTOR_ENTER(pwrite, fd, ptr, count); - if (fd >= 0) - COMMON_INTERCEPTOR_FD_RELEASE(fd); - SSIZE_T res = REAL(pwrite)(fd, ptr, count); - if (res > 0) - COMMON_INTERCEPTOR_READ_RANGE(ptr, res); - return res; -} -# define INIT_PWRITE INTERCEPT_FUNCTION(pwrite) +#if SANITIZER_INTERCEPT_PREAD +# define INIT_PREAD INTERCEPT_FUNCTION(pread) #else -# define INIT_PWRITE +# define INIT_PREAD #endif -#if SANITIZER_INTERCEPT_PWRITE64 -INTERCEPTOR(SSIZE_T, pwrite64, int fd, void *ptr, OFF64_T count) { - COMMON_INTERCEPTOR_ENTER(pwrite64, fd, ptr, count); - if (fd >= 0) - COMMON_INTERCEPTOR_FD_RELEASE(fd); - SSIZE_T res = REAL(pwrite64)(fd, ptr, count); - if (res > 0) - COMMON_INTERCEPTOR_READ_RANGE(ptr, res); - return res; -} -# define INIT_PWRITE64 INTERCEPT_FUNCTION(pwrite64) +#if SANITIZER_INTERCEPT_PREAD64 +# define INIT_PREAD64 INTERCEPT_FUNCTION(pread64) #else -# define INIT_PWRITE64 +# define INIT_PREAD64 #endif -#if SANITIZER_INTERCEPT_PRCTL -INTERCEPTOR(int, prctl, int option, - unsigned long arg2, unsigned long arg3, // NOLINT - unsigned long arg4, unsigned long arg5) { // NOLINT - COMMON_INTERCEPTOR_ENTER(prctl, option, arg2, arg3, arg4, arg5); - static const int PR_SET_NAME = 15; - int res = REAL(prctl(option, arg2, arg3, arg4, arg5)); - if (option == PR_SET_NAME) { - char buff[16]; - internal_strncpy(buff, (char*)arg2, 15); - buff[15] = 0; - COMMON_INTERCEPTOR_SET_THREAD_NAME(buff); - } - return res; -} -# define INIT_PRCTL INTERCEPT_FUNCTION(prctl) -#else -# define INIT_PRCTL -#endif // SANITIZER_INTERCEPT_PRCTL - #define SANITIZER_COMMON_INTERCEPTORS_INIT \ INIT_READ; \ INIT_PREAD; \ INIT_PREAD64; \ - INIT_PRCTL; \ - INIT_WRITE; \ #endif // SANITIZER_COMMON_INTERCEPTORS_H diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h index 86251d3d5af..57cf42f2637 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -15,24 +15,17 @@ #include "sanitizer_internal_defs.h" #if !defined(_WIN32) -# define SI_NOT_WINDOWS 1 +# define SANITIZER_INTERCEPT_READ 1 +# define SANITIZER_INTERCEPT_PREAD 1 #else -# define SI_NOT_WINDOWS 0 +# define SANITIZER_INTERCEPT_READ 0 +# define SANITIZER_INTERCEPT_PREAD 0 #endif #if defined(__linux__) && !defined(ANDROID) -# define SI_LINUX_NOT_ANDROID 1 +# define SANITIZER_INTERCEPT_PREAD64 1 #else -# define SI_LINUX_NOT_ANDROID 0 +# define SANITIZER_INTERCEPT_PREAD64 0 #endif -# define SANITIZER_INTERCEPT_READ SI_NOT_WINDOWS -# define SANITIZER_INTERCEPT_PREAD SI_NOT_WINDOWS -# define SANITIZER_INTERCEPT_WRITE SI_NOT_WINDOWS -# define SANITIZER_INTERCEPT_PWRITE SI_NOT_WINDOWS - -# define SANITIZER_INTERCEPT_PREAD64 SI_LINUX_NOT_ANDROID -# define SANITIZER_INTERCEPT_PWRITE64 SI_LINUX_NOT_ANDROID -# define SANITIZER_INTERCEPT_PRCTL SI_LINUX_NOT_ANDROID - 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, |

