summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/SanitizerArgs.cpp
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2016-11-11 23:17:36 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2016-11-11 23:17:36 +0000
commit8a2bedbf2798684ec862b2b341bcee9ffdcd525b (patch)
tree6cc7cf6722f4420db3971f79e7683c63668a01bd /clang/lib/Driver/SanitizerArgs.cpp
parent8e6839437661deb23b3b67dcfc0f9445a4e2da6c (diff)
downloadbcm5719-llvm-8a2bedbf2798684ec862b2b341bcee9ffdcd525b.tar.gz
bcm5719-llvm-8a2bedbf2798684ec862b2b341bcee9ffdcd525b.zip
Tread TSan LLVM flags to driver: add TSan controlling flags to clang.
Summary: New clang flags, all default to true: -f[no-]sanitize-thread-data-races -f[no-]sanitize-thread-stack-traces -f[no-]sanitize-thread-atomics Reviewers: dvyukov, pcc, eugenis Subscribers: pcc, cfe-commits Patch by Alex Shlyapnikov. Differential Revision: https://reviews.llvm.org/D26461 llvm-svn: 286669
Diffstat (limited to 'clang/lib/Driver/SanitizerArgs.cpp')
-rw-r--r--clang/lib/Driver/SanitizerArgs.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index 67a0e3e551b..16a3672472d 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -437,6 +437,18 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
TC.getTriple().getArch() == llvm::Triple::x86_64);
}
+ if (AllAddedKinds & Thread) {
+ TsanMemoryAccess = Args.hasFlag(options::OPT_fsanitize_thread_memory_access,
+ options::OPT_fno_sanitize_thread_memory_access,
+ TsanMemoryAccess);
+ TsanFuncEntryExit = Args.hasFlag(options::OPT_fsanitize_thread_func_entry_exit,
+ options::OPT_fno_sanitize_thread_func_entry_exit,
+ TsanFuncEntryExit);
+ TsanAtomics = Args.hasFlag(options::OPT_fsanitize_thread_atomics,
+ options::OPT_fno_sanitize_thread_atomics,
+ TsanAtomics);
+ }
+
if (AllAddedKinds & CFI) {
CfiCrossDso = Args.hasFlag(options::OPT_fsanitize_cfi_cross_dso,
options::OPT_fno_sanitize_cfi_cross_dso, false);
@@ -685,6 +697,22 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
if (MsanUseAfterDtor)
CmdArgs.push_back(Args.MakeArgString("-fsanitize-memory-use-after-dtor"));
+ // FIXME: Pass these parameters as function attributes, not as -llvm flags.
+ if (!TsanMemoryAccess) {
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-tsan-instrument-memory-accesses=0");
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-tsan-instrument-memintrinsics=0");
+ }
+ if (!TsanFuncEntryExit) {
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-tsan-instrument-func-entry-exit=0");
+ }
+ if (!TsanAtomics) {
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-tsan-instrument-atomics=0");
+ }
+
if (CfiCrossDso)
CmdArgs.push_back(Args.MakeArgString("-fsanitize-cfi-cross-dso"));
OpenPOWER on IntegriCloud