tsan: remove real func check from interceptors
authorDmitry Vyukov <dvyukov@google.com>
Tue, 26 Oct 2021 14:31:46 +0000 (16:31 +0200)
committerDmitry Vyukov <dvyukov@google.com>
Wed, 27 Oct 2021 06:47:27 +0000 (08:47 +0200)
If the real function is not intercepted,
we are going to crash one way or another.
The question is just in the failure mode:
error message vs NULL deref. But the message
costs us a check in every interceptor and
they are not observed to be failing in real life
for a long time, also other sanitizers don't
have this check as well (also crash on
NULL deref if that happens).
Remove the check from non-debug mode.

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D112540

compiler-rt/lib/tsan/rtl/tsan_interceptors.h

index 89b2f99..a772854 100644 (file)
@@ -47,10 +47,7 @@ inline bool in_symbolizer() {
 
 #define SCOPED_TSAN_INTERCEPTOR(func, ...)                                \
   SCOPED_INTERCEPTOR_RAW(func, __VA_ARGS__);                              \
-  if (REAL(func) == 0) {                                                  \
-    Report("FATAL: ThreadSanitizer: failed to intercept %s\n", #func);    \
-    Die();                                                                \
-  }                                                                       \
+  DCHECK(REAL(func));                                                     \
   if (!thr->is_inited || thr->ignore_interceptors || thr->in_ignored_lib) \
     return REAL(func)(__VA_ARGS__);