[sanitizer] a bit more unification for interceptors (merge read/pread/pread64 in asan and tsan)
llvm-svn: 172713
This commit is contained in:
parent
59e5d358db
commit
93ebdb5d64
|
@ -83,6 +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)
|
||||
#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) {
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
// COMMON_INTERCEPTOR_ENTER
|
||||
// COMMON_INTERCEPTOR_READ_RANGE
|
||||
// COMMON_INTERCEPTOR_WRITE_RANGE
|
||||
//
|
||||
// COMMON_INTERCEPTOR_FD_ACQUIRE
|
||||
// COMMON_INTERCEPTOR_FD_RELEASE
|
||||
//===----------------------------------------------------------------------===//
|
||||
#ifndef SANITIZER_COMMON_INTERCEPTORS_H
|
||||
#define SANITIZER_COMMON_INTERCEPTORS_H
|
||||
|
@ -29,6 +30,8 @@ INTERCEPTOR(SSIZE_T, read, int fd, void *ptr, SIZE_T count) {
|
|||
SSIZE_T res = REAL(read)(fd, ptr, count);
|
||||
if (res > 0)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ptr, res);
|
||||
if (res >= 0 && fd >= 0)
|
||||
COMMON_INTERCEPTOR_FD_ACQUIRE(fd);
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
|
@ -39,6 +42,8 @@ INTERCEPTOR(SSIZE_T, pread, int fd, void *ptr, SIZE_T count, OFF_T offset) {
|
|||
SSIZE_T res = REAL(pread)(fd, ptr, count, offset);
|
||||
if (res > 0)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ptr, res);
|
||||
if (res >= 0 && fd >= 0)
|
||||
COMMON_INTERCEPTOR_FD_ACQUIRE(fd);
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
|
@ -49,6 +54,8 @@ INTERCEPTOR(SSIZE_T, pread64, int fd, void *ptr, SIZE_T count, OFF64_T offset) {
|
|||
SSIZE_T res = REAL(pread64)(fd, ptr, count, offset);
|
||||
if (res > 0)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ptr, res);
|
||||
if (res >= 0 && fd >= 0)
|
||||
COMMON_INTERCEPTOR_FD_ACQUIRE(fd);
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -16,6 +16,7 @@ void *Thread1(void *x) {
|
|||
|
||||
void *Thread2(void *x) {
|
||||
AnnotateThreadName(__FILE__, __LINE__, "Thread2");
|
||||
// TODO: pthread_setname_np(pthread_self(), "Thread2");
|
||||
Global--;
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1241,33 +1241,6 @@ TSAN_INTERCEPTOR(int, pipe2, int *pipefd, int flags) {
|
|||
return res;
|
||||
}
|
||||
|
||||
TSAN_INTERCEPTOR(long_t, read, int fd, void *buf, long_t sz) {
|
||||
SCOPED_TSAN_INTERCEPTOR(read, fd, buf, sz);
|
||||
int res = REAL(read)(fd, buf, sz);
|
||||
if (res >= 0 && fd >= 0) {
|
||||
FdAcquire(thr, pc, fd);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
TSAN_INTERCEPTOR(long_t, pread, int fd, void *buf, long_t sz, unsigned off) {
|
||||
SCOPED_TSAN_INTERCEPTOR(pread, fd, buf, sz, off);
|
||||
int res = REAL(pread)(fd, buf, sz, off);
|
||||
if (res >= 0 && fd >= 0) {
|
||||
FdAcquire(thr, pc, fd);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
TSAN_INTERCEPTOR(long_t, pread64, int fd, void *buf, long_t sz, u64 off) {
|
||||
SCOPED_TSAN_INTERCEPTOR(pread64, fd, buf, sz, off);
|
||||
int res = REAL(pread64)(fd, buf, sz, off);
|
||||
if (res >= 0 && fd >= 0) {
|
||||
FdAcquire(thr, pc, fd);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
TSAN_INTERCEPTOR(long_t, readv, int fd, void *vec, int cnt) {
|
||||
SCOPED_TSAN_INTERCEPTOR(readv, fd, vec, cnt);
|
||||
int res = REAL(readv)(fd, vec, cnt);
|
||||
|
@ -1645,6 +1618,14 @@ TSAN_INTERCEPTOR(int, fork, int fake) {
|
|||
return pid;
|
||||
}
|
||||
|
||||
#define COMMON_INTERCEPTOR_WRITE_RANGE(ptr, size) // FIXME
|
||||
#define COMMON_INTERCEPTOR_READ_RANGE(ptr, size) // FIXME
|
||||
#define COMMON_INTERCEPTOR_ENTER(func, ...) \
|
||||
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)
|
||||
#include "sanitizer_common/sanitizer_common_interceptors.h"
|
||||
|
||||
namespace __tsan {
|
||||
|
||||
void ProcessPendingSignals(ThreadState *thr) {
|
||||
|
@ -1708,6 +1689,8 @@ void InitializeInterceptors() {
|
|||
REAL(memcpy) = internal_memcpy;
|
||||
REAL(memcmp) = internal_memcmp;
|
||||
|
||||
SANITIZER_COMMON_INTERCEPTORS_INIT;
|
||||
|
||||
TSAN_INTERCEPT(longjmp);
|
||||
TSAN_INTERCEPT(siglongjmp);
|
||||
|
||||
|
@ -1811,9 +1794,6 @@ void InitializeInterceptors() {
|
|||
TSAN_INTERCEPT(pipe);
|
||||
TSAN_INTERCEPT(pipe2);
|
||||
|
||||
TSAN_INTERCEPT(read);
|
||||
TSAN_INTERCEPT(pread);
|
||||
TSAN_INTERCEPT(pread64);
|
||||
TSAN_INTERCEPT(readv);
|
||||
TSAN_INTERCEPT(preadv64);
|
||||
TSAN_INTERCEPT(write);
|
||||
|
|
Loading…
Reference in New Issue