forked from OSchip/llvm-project
[TSan] Revert removal of ignore_interceptors_accesses flag
This flag suppresses TSan FPs on Darwin. I removed this flag
prematurely and have been dealing with the fallout ever since.
This commit puts back the flag, reverting 7d1085cb
[1].
[1] https://reviews.llvm.org/D55075
This commit is contained in:
parent
4db2b70248
commit
e47c0ef09f
|
@ -76,6 +76,8 @@ TSAN_FLAG(int, io_sync, 1,
|
||||||
TSAN_FLAG(bool, die_after_fork, true,
|
TSAN_FLAG(bool, die_after_fork, true,
|
||||||
"Die after multi-threaded fork if the child creates new threads.")
|
"Die after multi-threaded fork if the child creates new threads.")
|
||||||
TSAN_FLAG(const char *, suppressions, "", "Suppressions file name.")
|
TSAN_FLAG(const char *, suppressions, "", "Suppressions file name.")
|
||||||
|
TSAN_FLAG(bool, ignore_interceptors_accesses, SANITIZER_MAC ? true : false,
|
||||||
|
"Ignore reads and writes from all interceptors.")
|
||||||
TSAN_FLAG(bool, ignore_noninstrumented_modules, SANITIZER_MAC ? true : false,
|
TSAN_FLAG(bool, ignore_noninstrumented_modules, SANITIZER_MAC ? true : false,
|
||||||
"Interceptors should only detect races when called from instrumented "
|
"Interceptors should only detect races when called from instrumented "
|
||||||
"modules.")
|
"modules.")
|
||||||
|
|
|
@ -254,7 +254,8 @@ ScopedInterceptor::ScopedInterceptor(ThreadState *thr, const char *fname,
|
||||||
if (!thr_->ignore_interceptors) FuncEntry(thr, pc);
|
if (!thr_->ignore_interceptors) FuncEntry(thr, pc);
|
||||||
DPrintf("#%d: intercept %s()\n", thr_->tid, fname);
|
DPrintf("#%d: intercept %s()\n", thr_->tid, fname);
|
||||||
ignoring_ =
|
ignoring_ =
|
||||||
!thr_->in_ignored_lib && libignore()->IsIgnored(pc, &in_ignored_lib_);
|
!thr_->in_ignored_lib && (flags()->ignore_interceptors_accesses ||
|
||||||
|
libignore()->IsIgnored(pc, &in_ignored_lib_));
|
||||||
EnableIgnores();
|
EnableIgnores();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
// RUN: %clangxx -DUSING_%tool_name %s -o %t
|
// RUN: %clangxx -DUSING_%tool_name %s -o %t
|
||||||
|
|
||||||
// Intentionally don't inherit the default options.
|
// Intentionally don't inherit the default options.
|
||||||
// RUN: env %tool_options='' not --crash %run %t 2>&1
|
// RUN: env %tool_options='' TSAN_OPTIONS=ignore_interceptors_accesses=0 not --crash %run %t 2>&1
|
||||||
|
|
||||||
// When we use lit's default options, we shouldn't crash.
|
// When we use lit's default options, we shouldn't crash.
|
||||||
// RUN: not %run %t 2>&1
|
// RUN: not %run %t 2>&1
|
||||||
|
|
|
@ -35,6 +35,8 @@ if config.host_os == 'Darwin':
|
||||||
# On Darwin, we default to `abort_on_error=1`, which would make tests run
|
# On Darwin, we default to `abort_on_error=1`, which would make tests run
|
||||||
# much slower. Let's override this and run lit tests with 'abort_on_error=0'.
|
# much slower. Let's override this and run lit tests with 'abort_on_error=0'.
|
||||||
default_tool_options += ['abort_on_error=0']
|
default_tool_options += ['abort_on_error=0']
|
||||||
|
if config.tool_name == "tsan":
|
||||||
|
default_tool_options += ['ignore_interceptors_accesses=0']
|
||||||
elif config.android:
|
elif config.android:
|
||||||
# The same as on Darwin, we default to "abort_on_error=1" which slows down
|
# The same as on Darwin, we default to "abort_on_error=1" which slows down
|
||||||
# testing. Also, all existing tests are using "not" instead of "not --crash"
|
# testing. Also, all existing tests are using "not" instead of "not --crash"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// RUN: %clang_tsan %s -lc++ -fobjc-arc -lobjc -o %t -framework Foundation %darwin_min_target_with_full_runtime_arc_support
|
// RUN: %clang_tsan %s -lc++ -fobjc-arc -lobjc -o %t -framework Foundation %darwin_min_target_with_full_runtime_arc_support
|
||||||
// RUN: %run %t 2>&1 | FileCheck %s
|
// RUN: %env_tsan_opts=ignore_interceptors_accesses=1 %run %t 2>&1 | FileCheck %s
|
||||||
|
|
||||||
// Check that we do not report races between:
|
// Check that we do not report races between:
|
||||||
// - Object retain and initialize
|
// - Object retain and initialize
|
||||||
|
|
|
@ -21,3 +21,4 @@ if config.host_os == 'Darwin':
|
||||||
config.environment['TSAN_OPTIONS'] += ':ignore_noninstrumented_modules=0'
|
config.environment['TSAN_OPTIONS'] += ':ignore_noninstrumented_modules=0'
|
||||||
else:
|
else:
|
||||||
config.environment['TSAN_OPTIONS'] = 'ignore_noninstrumented_modules=0'
|
config.environment['TSAN_OPTIONS'] = 'ignore_noninstrumented_modules=0'
|
||||||
|
config.environment['TSAN_OPTIONS'] += ':ignore_interceptors_accesses=0'
|
||||||
|
|
|
@ -28,6 +28,7 @@ if config.host_os == 'Darwin':
|
||||||
# suppresses some races the tests are supposed to find. Let's run without this
|
# suppresses some races the tests are supposed to find. Let's run without this
|
||||||
# setting, but turn it back on for Darwin tests (see Darwin/lit.local.cfg.py).
|
# setting, but turn it back on for Darwin tests (see Darwin/lit.local.cfg.py).
|
||||||
default_tsan_opts += ':ignore_noninstrumented_modules=0'
|
default_tsan_opts += ':ignore_noninstrumented_modules=0'
|
||||||
|
default_tsan_opts += ':ignore_interceptors_accesses=0'
|
||||||
|
|
||||||
# Platform-specific default TSAN_OPTIONS for lit tests.
|
# Platform-specific default TSAN_OPTIONS for lit tests.
|
||||||
if default_tsan_opts:
|
if default_tsan_opts:
|
||||||
|
|
Loading…
Reference in New Issue