summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2012-11-09 19:55:06 +0000
committerDmitry Vyukov <dvyukov@google.com>2012-11-09 19:55:06 +0000
commitaad173b2f1dae9f88bbffd217ebd46ed1f020bcb (patch)
treec203218b8a33dbea62339a897727121d9c1f9615
parent93b4cafd631b661b4b612ccdc0938f7f1e1c86d6 (diff)
downloadcompiler-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.cc7
-rw-r--r--lib/tsan/rtl/tsan_stat.cc4
-rw-r--r--lib/tsan/rtl/tsan_stat.h1
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,