diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2012-11-09 19:55:06 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2012-11-09 19:55:06 +0000 |
commit | aad173b2f1dae9f88bbffd217ebd46ed1f020bcb (patch) | |
tree | c203218b8a33dbea62339a897727121d9c1f9615 | |
parent | 93b4cafd631b661b4b612ccdc0938f7f1e1c86d6 (diff) | |
download | compiler-rt-aad173b2f1dae9f88bbffd217ebd46ed1f020bcb.tar.gz |
tsan: intercept gettimeofday()
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@167630 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/tsan/rtl/tsan_interceptors.cc | 7 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_stat.cc | 4 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_stat.h | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/lib/tsan/rtl/tsan_interceptors.cc b/lib/tsan/rtl/tsan_interceptors.cc index 5151af433..e8aa7d5c0 100644 --- a/lib/tsan/rtl/tsan_interceptors.cc +++ b/lib/tsan/rtl/tsan_interceptors.cc @@ -1365,6 +1365,12 @@ static void process_pending_signals(ThreadState *thr) { thr->in_signal_handler = false; } +TSAN_INTERCEPTOR(int, gettimeofday, void *tv, void *tz) { + SCOPED_TSAN_INTERCEPTOR(gettimeofday, tv, tz); + // It's intercepted merely to process pending signals. + return REAL(gettimeofday)(tv, tz); +} + namespace __tsan { void InitializeInterceptors() { @@ -1492,6 +1498,7 @@ void InitializeInterceptors() { TSAN_INTERCEPT(sleep); TSAN_INTERCEPT(usleep); TSAN_INTERCEPT(nanosleep); + TSAN_INTERCEPT(gettimeofday); atexit_ctx = new(internal_alloc(MBlockAtExit, sizeof(AtExitContext))) AtExitContext(); diff --git a/lib/tsan/rtl/tsan_stat.cc b/lib/tsan/rtl/tsan_stat.cc index 1eb02a55e..d8fbd0cc2 100644 --- a/lib/tsan/rtl/tsan_stat.cc +++ b/lib/tsan/rtl/tsan_stat.cc @@ -197,6 +197,10 @@ void StatOutput(u64 *stat) { name[StatInt_epoll_ctl] = " epoll_ctl "; name[StatInt_epoll_wait] = " epoll_wait "; name[StatInt_sigaction] = " sigaction "; + name[StatInt_sleep] = " sleep "; + name[StatInt_usleep] = " usleep "; + name[StatInt_nanosleep] = " nanosleep "; + name[StatInt_gettimeofday] = " gettimeofday "; name[StatAnnotation] = "Dynamic annotations "; name[StatAnnotateHappensBefore] = " HappensBefore "; diff --git a/lib/tsan/rtl/tsan_stat.h b/lib/tsan/rtl/tsan_stat.h index 16c43f13c..3b81acafc 100644 --- a/lib/tsan/rtl/tsan_stat.h +++ b/lib/tsan/rtl/tsan_stat.h @@ -203,6 +203,7 @@ enum StatType { StatInt_sleep, StatInt_usleep, StatInt_nanosleep, + StatInt_gettimeofday, // Dynamic annotations. StatAnnotation, |