Index: lib/tsan/rtl/tsan_interceptors.cc =================================================================== --- lib/tsan/rtl/tsan_interceptors.cc +++ lib/tsan/rtl/tsan_interceptors.cc @@ -736,6 +736,7 @@ return res; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(void*, mmap64, void *addr, long_t sz, int prot, int flags, int fd, u64 off) { SCOPED_TSAN_INTERCEPTOR(mmap64, addr, sz, prot, flags, fd, off); @@ -749,6 +750,7 @@ } return res; } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, munmap, void *addr, long_t sz) { SCOPED_TSAN_INTERCEPTOR(munmap, addr, sz); @@ -757,10 +759,12 @@ return res; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(void*, memalign, uptr align, uptr sz) { SCOPED_INTERCEPTOR_RAW(memalign, align, sz); return user_alloc(thr, pc, sz, align); } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(void*, aligned_alloc, uptr align, uptr sz) { SCOPED_INTERCEPTOR_RAW(memalign, align, sz); @@ -772,11 +776,13 @@ return user_alloc(thr, pc, sz, GetPageSizeCached()); } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(void*, pvalloc, uptr sz) { SCOPED_INTERCEPTOR_RAW(pvalloc, sz); sz = RoundUp(sz, GetPageSizeCached()); return user_alloc(thr, pc, sz, GetPageSizeCached()); } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, posix_memalign, void **memptr, uptr align, uptr sz) { SCOPED_INTERCEPTOR_RAW(posix_memalign, memptr, align, sz); @@ -1321,16 +1327,24 @@ return res; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, __xstat, int version, const char *path, void *buf) { SCOPED_TSAN_INTERCEPTOR(__xstat, version, path, buf); return REAL(__xstat)(version, path, buf); } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, stat, const char *path, void *buf) { +#if SANITIZER_FREEBSD + SCOPED_TSAN_INTERCEPTOR(stat, path, buf); + return REAL(stat)(path, buf); +#else SCOPED_TSAN_INTERCEPTOR(__xstat, 0, path, buf); return REAL(__xstat)(0, path, buf); +#endif } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, __xstat64, int version, const char *path, void *buf) { SCOPED_TSAN_INTERCEPTOR(__xstat64, version, path, buf); return REAL(__xstat64)(version, path, buf); @@ -1345,12 +1359,19 @@ SCOPED_TSAN_INTERCEPTOR(__lxstat, version, path, buf); return REAL(__lxstat)(version, path, buf); } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, lstat, const char *path, void *buf) { +#if SANITIZER_FREEBSD + SCOPED_TSAN_INTERCEPTOR(lstat, path, buf); + return REAL(lstat)(path, buf); +#else SCOPED_TSAN_INTERCEPTOR(__lxstat, 0, path, buf); return REAL(__lxstat)(0, path, buf); +#endif } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, __lxstat64, int version, const char *path, void *buf) { SCOPED_TSAN_INTERCEPTOR(__lxstat64, version, path, buf); return REAL(__lxstat64)(version, path, buf); @@ -1367,14 +1388,23 @@ FdAccess(thr, pc, fd); return REAL(__fxstat)(version, fd, buf); } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, fstat, int fd, void *buf) { +#if SANITIZER_FREEBSD + SCOPED_TSAN_INTERCEPTOR(fstat, fd, buf); + if (fd > 0) + FdAccess(thr, pc, fd); + return REAL(fstat)(fd, buf); +#else SCOPED_TSAN_INTERCEPTOR(__fxstat, 0, fd, buf); if (fd > 0) FdAccess(thr, pc, fd); return REAL(__fxstat)(0, fd, buf); +#endif } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, __fxstat64, int version, int fd, void *buf) { SCOPED_TSAN_INTERCEPTOR(__fxstat64, version, fd, buf); if (fd > 0) @@ -1388,6 +1418,7 @@ FdAccess(thr, pc, fd); return REAL(__fxstat64)(0, fd, buf); } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, open, const char *name, int flags, int mode) { SCOPED_TSAN_INTERCEPTOR(open, name, flags, mode); @@ -1397,6 +1428,7 @@ return fd; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, open64, const char *name, int flags, int mode) { SCOPED_TSAN_INTERCEPTOR(open64, name, flags, mode); int fd = REAL(open64)(name, flags, mode); @@ -1404,6 +1436,7 @@ FdFileCreate(thr, pc, fd); return fd; } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, creat, const char *name, int mode) { SCOPED_TSAN_INTERCEPTOR(creat, name, mode); @@ -1413,6 +1446,7 @@ return fd; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, creat64, const char *name, int mode) { SCOPED_TSAN_INTERCEPTOR(creat64, name, mode); int fd = REAL(creat64)(name, mode); @@ -1420,6 +1454,7 @@ FdFileCreate(thr, pc, fd); return fd; } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, dup, int oldfd) { SCOPED_TSAN_INTERCEPTOR(dup, oldfd); @@ -1445,6 +1480,7 @@ return newfd2; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, eventfd, unsigned initval, int flags) { SCOPED_TSAN_INTERCEPTOR(eventfd, initval, flags); int fd = REAL(eventfd)(initval, flags); @@ -1478,6 +1514,7 @@ FdInotifyCreate(thr, pc, fd); return fd; } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, socket, int domain, int type, int protocol) { SCOPED_TSAN_INTERCEPTOR(socket, domain, type, protocol); @@ -1520,6 +1557,7 @@ return res; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, epoll_create, int size) { SCOPED_TSAN_INTERCEPTOR(epoll_create, size); int fd = REAL(epoll_create)(size); @@ -1535,6 +1573,7 @@ FdPollCreate(thr, pc, fd); return fd; } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, close, int fd) { SCOPED_TSAN_INTERCEPTOR(close, fd); @@ -1543,6 +1582,7 @@ return REAL(close)(fd); } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, __close, int fd) { SCOPED_TSAN_INTERCEPTOR(__close, fd); if (fd >= 0) @@ -1561,6 +1601,7 @@ } REAL(__res_iclose)(state, free_addr); } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, pipe, int *pipefd) { SCOPED_TSAN_INTERCEPTOR(pipe, pipefd); @@ -1627,6 +1668,7 @@ return res; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(void*, tmpfile64, int fake) { SCOPED_TSAN_INTERCEPTOR(tmpfile64, fake); void *res = REAL(tmpfile64)(fake); @@ -1637,6 +1679,7 @@ } return res; } +#endif // !SANITIZER_FREEBSD TSAN_INTERCEPTOR(uptr, fread, void *ptr, uptr size, uptr nmemb, void *f) { // libc file streams can call user-supplied functions, see fopencookie. @@ -1683,6 +1726,7 @@ return res; } +#if !SANITIZER_FREEBSD TSAN_INTERCEPTOR(int, epoll_ctl, int epfd, int op, int fd, void *ev) { SCOPED_TSAN_INTERCEPTOR(epoll_ctl, epfd, op, fd, ev); if (epfd >= 0) @@ -1704,6 +1748,7 @@ FdAcquire(thr, pc, epfd); return res; } +#endif // !SANITIZER_FREEBSD namespace __tsan { @@ -2258,11 +2303,17 @@ TSAN_INTERCEPT(free); TSAN_INTERCEPT(cfree); TSAN_INTERCEPT(mmap); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(mmap64); +#endif TSAN_INTERCEPT(munmap); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(memalign); +#endif TSAN_INTERCEPT(valloc); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(pvalloc); +#endif TSAN_INTERCEPT(posix_memalign); TSAN_INTERCEPT(strlen); @@ -2325,38 +2376,54 @@ TSAN_INTERCEPT(sem_getvalue); TSAN_INTERCEPT(stat); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(__xstat); TSAN_INTERCEPT(stat64); TSAN_INTERCEPT(__xstat64); +#endif TSAN_INTERCEPT(lstat); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(__lxstat); TSAN_INTERCEPT(lstat64); TSAN_INTERCEPT(__lxstat64); +#endif TSAN_INTERCEPT(fstat); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(__fxstat); TSAN_INTERCEPT(fstat64); TSAN_INTERCEPT(__fxstat64); +#endif TSAN_INTERCEPT(open); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(open64); +#endif TSAN_INTERCEPT(creat); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(creat64); +#endif TSAN_INTERCEPT(dup); TSAN_INTERCEPT(dup2); TSAN_INTERCEPT(dup3); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(eventfd); TSAN_INTERCEPT(signalfd); TSAN_INTERCEPT(inotify_init); TSAN_INTERCEPT(inotify_init1); +#endif TSAN_INTERCEPT(socket); TSAN_INTERCEPT(socketpair); TSAN_INTERCEPT(connect); TSAN_INTERCEPT(bind); TSAN_INTERCEPT(listen); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(epoll_create); TSAN_INTERCEPT(epoll_create1); +#endif TSAN_INTERCEPT(close); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(__close); TSAN_INTERCEPT(__res_iclose); +#endif TSAN_INTERCEPT(pipe); TSAN_INTERCEPT(pipe2); @@ -2366,7 +2433,9 @@ TSAN_INTERCEPT(unlink); TSAN_INTERCEPT(tmpfile); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(tmpfile64); +#endif TSAN_INTERCEPT(fread); TSAN_INTERCEPT(fwrite); TSAN_INTERCEPT(abort); @@ -2374,8 +2443,10 @@ TSAN_INTERCEPT(rmdir); TSAN_INTERCEPT(opendir); +#if !SANITIZER_FREEBSD TSAN_INTERCEPT(epoll_ctl); TSAN_INTERCEPT(epoll_wait); +#endif TSAN_INTERCEPT(sigaction); TSAN_INTERCEPT(signal);