[compiler-rt] r217559 - [TSan] Use common flags in the same way as all the other sanitizers
Alexey Samsonov
vonosmas at gmail.com
Wed Sep 10 16:08:06 PDT 2014
Author: samsonov
Date: Wed Sep 10 18:08:06 2014
New Revision: 217559
URL: http://llvm.org/viewvc/llvm-project?rev=217559&view=rev
Log:
[TSan] Use common flags in the same way as all the other sanitizers
Modified:
compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc
compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc
compiler-rt/trunk/lib/tsan/tests/unit/tsan_flags_test.cc
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc?rev=217559&r1=217558&r2=217559&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc Wed Sep 10 18:08:06 2014
@@ -93,21 +93,19 @@ void InitializeFlags(Flags *f, const cha
// DDFlags
f->second_deadlock_stack = false;
- SetCommonFlagsDefaults(f);
+ CommonFlags *cf = common_flags();
+ SetCommonFlagsDefaults(cf);
// Override some common flags defaults.
- f->allow_addr2line = true;
- f->detect_deadlocks = true;
- f->print_suppressions = false;
+ cf->allow_addr2line = true;
+ cf->detect_deadlocks = true;
+ cf->print_suppressions = false;
// Let a frontend override.
ParseFlags(f, __tsan_default_options());
- ParseCommonFlagsFromString(f, __tsan_default_options());
+ ParseCommonFlagsFromString(cf, __tsan_default_options());
// Override from command line.
ParseFlags(f, env);
- ParseCommonFlagsFromString(f, env);
-
- // Copy back to common flags.
- internal_memcpy(common_flags(), f, sizeof(*common_flags()));
+ ParseCommonFlagsFromString(cf, env);
// Sanity check.
if (!f->report_bugs) {
@@ -116,7 +114,7 @@ void InitializeFlags(Flags *f, const cha
f->report_signal_unsafe = false;
}
- if (f->help) PrintFlagDescriptions();
+ if (cf->help) PrintFlagDescriptions();
if (f->history_size < 0 || f->history_size > 7) {
Printf("ThreadSanitizer: incorrect value for history_size"
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h?rev=217559&r1=217558&r2=217559&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_flags.h Wed Sep 10 18:08:06 2014
@@ -19,7 +19,7 @@
namespace __tsan {
-struct Flags : CommonFlags, DDFlags {
+struct Flags : DDFlags {
// Enable dynamic annotations, otherwise they are no-ops.
bool enable_annotations;
// Suppress a race report if we've already output another race report
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc?rev=217559&r1=217558&r2=217559&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl.cc Wed Sep 10 18:08:06 2014
@@ -167,8 +167,7 @@ static void BackgroundThread(void *arg)
// Flush memory if requested.
if (flags()->flush_memory_ms > 0) {
if (last_flush + flags()->flush_memory_ms * kMs2Ns < now) {
- if (flags()->verbosity > 0)
- Printf("ThreadSanitizer: periodic memory flush\n");
+ VPrintf(1, "ThreadSanitizer: periodic memory flush\n");
FlushShadowMemory();
last_flush = NanoTime();
}
@@ -177,18 +176,14 @@ static void BackgroundThread(void *arg)
if (flags()->memory_limit_mb > 0) {
uptr rss = GetRSS();
uptr limit = uptr(flags()->memory_limit_mb) << 20;
- if (flags()->verbosity > 0) {
- Printf("ThreadSanitizer: memory flush check"
- " RSS=%llu LAST=%llu LIMIT=%llu\n",
- (u64)rss>>20, (u64)last_rss>>20, (u64)limit>>20);
- }
+ VPrintf(1, "ThreadSanitizer: memory flush check"
+ " RSS=%llu LAST=%llu LIMIT=%llu\n",
+ (u64)rss >> 20, (u64)last_rss >> 20, (u64)limit >> 20);
if (2 * rss > limit + last_rss) {
- if (flags()->verbosity > 0)
- Printf("ThreadSanitizer: flushing memory due to RSS\n");
+ VPrintf(1, "ThreadSanitizer: flushing memory due to RSS\n");
FlushShadowMemory();
rss = GetRSS();
- if (flags()->verbosity > 0)
- Printf("ThreadSanitizer: memory flushed RSS=%llu\n", (u64)rss>>20);
+ VPrintf(1, "ThreadSanitizer: memory flushed RSS=%llu\n", (u64)rss>>20);
}
last_rss = rss;
}
@@ -303,7 +298,7 @@ void Initialize(ThreadState *thr) {
InitializeShadowMemory();
#endif
// Setup correct file descriptor for error reports.
- __sanitizer_set_report_path(flags()->log_path);
+ __sanitizer_set_report_path(common_flags()->log_path);
InitializeSuppressions();
#ifndef TSAN_GO
InitializeLibIgnore();
@@ -313,12 +308,11 @@ void Initialize(ThreadState *thr) {
#ifndef TSAN_GO
SetSandboxingCallback(StopBackgroundThread);
#endif
- if (flags()->detect_deadlocks)
+ if (common_flags()->detect_deadlocks)
ctx->dd = DDetector::Create(flags());
- if (ctx->flags.verbosity)
- Printf("***** Running under ThreadSanitizer v2 (pid %d) *****\n",
- (int)internal_getpid());
+ VPrintf(1, "***** Running under ThreadSanitizer v2 (pid %d) *****\n",
+ (int)internal_getpid());
// Initialize thread 0.
int tid = ThreadCreate(thr, 0, 0, true);
@@ -349,7 +343,7 @@ int Finalize(ThreadState *thr) {
ctx->report_mtx.Unlock();
#ifndef TSAN_GO
- if (ctx->flags.verbosity)
+ if (common_flags()->verbosity)
AllocatorPrintStats();
#endif
@@ -370,7 +364,7 @@ int Finalize(ThreadState *thr) {
ctx->nmissed_expected);
}
- if (flags()->print_suppressions)
+ if (common_flags()->print_suppressions)
PrintMatchedSuppressions();
#ifndef TSAN_GO
if (flags()->print_benign)
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc?rev=217559&r1=217558&r2=217559&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_mutex.cc Wed Sep 10 18:08:06 2014
@@ -103,7 +103,7 @@ void MutexDestroy(ThreadState *thr, uptr
SyncVar *s = ctx->metamap.GetIfExistsAndLock(addr);
if (s == 0)
return;
- if (flags()->detect_deadlocks) {
+ if (common_flags()->detect_deadlocks) {
Callback cb(thr, pc);
ctx->dd->MutexDestroy(&cb, &s->dd);
ctx->dd->MutexInit(&cb, &s->dd);
@@ -172,7 +172,7 @@ void MutexLock(ThreadState *thr, uptr pc
}
s->recursion += rec;
thr->mset.Add(s->GetId(), true, thr->fast_state.epoch());
- if (flags()->detect_deadlocks && (s->recursion - rec) == 0) {
+ if (common_flags()->detect_deadlocks && (s->recursion - rec) == 0) {
Callback cb(thr, pc);
if (!try_lock)
ctx->dd->MutexBeforeLock(&cb, &s->dd, true);
@@ -183,7 +183,7 @@ void MutexLock(ThreadState *thr, uptr pc
// Can't touch s after this point.
if (report_double_lock)
ReportMutexMisuse(thr, pc, ReportTypeMutexDoubleLock, addr, mid);
- if (flags()->detect_deadlocks) {
+ if (common_flags()->detect_deadlocks) {
Callback cb(thr, pc);
ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
}
@@ -215,7 +215,8 @@ int MutexUnlock(ThreadState *thr, uptr p
}
}
thr->mset.Del(s->GetId(), true);
- if (flags()->detect_deadlocks && s->recursion == 0 && !report_bad_unlock) {
+ if (common_flags()->detect_deadlocks && s->recursion == 0 &&
+ !report_bad_unlock) {
Callback cb(thr, pc);
ctx->dd->MutexBeforeUnlock(&cb, &s->dd, true);
}
@@ -224,7 +225,7 @@ int MutexUnlock(ThreadState *thr, uptr p
// Can't touch s after this point.
if (report_bad_unlock)
ReportMutexMisuse(thr, pc, ReportTypeMutexBadUnlock, addr, mid);
- if (flags()->detect_deadlocks && !report_bad_unlock) {
+ if (common_flags()->detect_deadlocks && !report_bad_unlock) {
Callback cb(thr, pc);
ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
}
@@ -249,7 +250,7 @@ void MutexReadLock(ThreadState *thr, upt
AcquireImpl(thr, pc, &s->clock);
s->last_lock = thr->fast_state.raw();
thr->mset.Add(s->GetId(), false, thr->fast_state.epoch());
- if (flags()->detect_deadlocks && s->recursion == 0) {
+ if (common_flags()->detect_deadlocks && s->recursion == 0) {
Callback cb(thr, pc);
if (!trylock)
ctx->dd->MutexBeforeLock(&cb, &s->dd, false);
@@ -260,7 +261,7 @@ void MutexReadLock(ThreadState *thr, upt
// Can't touch s after this point.
if (report_bad_lock)
ReportMutexMisuse(thr, pc, ReportTypeMutexBadReadLock, addr, mid);
- if (flags()->detect_deadlocks) {
+ if (common_flags()->detect_deadlocks) {
Callback cb(thr, pc);
ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
}
@@ -282,7 +283,7 @@ void MutexReadUnlock(ThreadState *thr, u
}
}
ReleaseImpl(thr, pc, &s->read_clock);
- if (flags()->detect_deadlocks && s->recursion == 0) {
+ if (common_flags()->detect_deadlocks && s->recursion == 0) {
Callback cb(thr, pc);
ctx->dd->MutexBeforeUnlock(&cb, &s->dd, false);
}
@@ -292,7 +293,7 @@ void MutexReadUnlock(ThreadState *thr, u
thr->mset.Del(mid, false);
if (report_bad_unlock)
ReportMutexMisuse(thr, pc, ReportTypeMutexBadReadUnlock, addr, mid);
- if (flags()->detect_deadlocks) {
+ if (common_flags()->detect_deadlocks) {
Callback cb(thr, pc);
ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
}
@@ -330,7 +331,7 @@ void MutexReadOrWriteUnlock(ThreadState
report_bad_unlock = true;
}
thr->mset.Del(s->GetId(), write);
- if (flags()->detect_deadlocks && s->recursion == 0) {
+ if (common_flags()->detect_deadlocks && s->recursion == 0) {
Callback cb(thr, pc);
ctx->dd->MutexBeforeUnlock(&cb, &s->dd, write);
}
@@ -339,7 +340,7 @@ void MutexReadOrWriteUnlock(ThreadState
// Can't touch s after this point.
if (report_bad_unlock)
ReportMutexMisuse(thr, pc, ReportTypeMutexBadUnlock, addr, mid);
- if (flags()->detect_deadlocks) {
+ if (common_flags()->detect_deadlocks) {
Callback cb(thr, pc);
ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
}
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc?rev=217559&r1=217558&r2=217559&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc Wed Sep 10 18:08:06 2014
@@ -61,7 +61,7 @@ static void StackStripMain(ReportStack *
ReportStack *last_frame2 = 0;
const char *prefix = "__interceptor_";
uptr prefix_len = internal_strlen(prefix);
- const char *path_prefix = flags()->strip_path_prefix;
+ const char *path_prefix = common_flags()->strip_path_prefix;
uptr path_prefix_len = internal_strlen(path_prefix);
char *pos;
for (ReportStack *ent = stack; ent; ent = ent->next) {
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc?rev=217559&r1=217558&r2=217559&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc Wed Sep 10 18:08:06 2014
@@ -107,7 +107,7 @@ void ThreadContext::OnStarted(void *arg)
#ifndef TSAN_GO
AllocatorThreadStart(thr);
#endif
- if (flags()->detect_deadlocks) {
+ if (common_flags()->detect_deadlocks) {
thr->dd_pt = ctx->dd->CreatePhysicalThread();
thr->dd_lt = ctx->dd->CreateLogicalThread(unique_id);
}
@@ -134,7 +134,7 @@ void ThreadContext::OnFinished() {
}
epoch1 = thr->fast_state.epoch();
- if (flags()->detect_deadlocks) {
+ if (common_flags()->detect_deadlocks) {
ctx->dd->DestroyPhysicalThread(thr->dd_pt);
ctx->dd->DestroyLogicalThread(thr->dd_lt);
}
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc?rev=217559&r1=217558&r2=217559&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_sync.cc Wed Sep 10 18:08:06 2014
@@ -32,7 +32,7 @@ void SyncVar::Init(ThreadState *thr, upt
creation_stack_id = 0;
if (kCppMode) // Go does not use them
creation_stack_id = CurrentStackId(thr, pc);
- if (flags()->detect_deadlocks)
+ if (common_flags()->detect_deadlocks)
DDMutexInit(thr, pc, this);
}
Modified: compiler-rt/trunk/lib/tsan/tests/unit/tsan_flags_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/tests/unit/tsan_flags_test.cc?rev=217559&r1=217558&r2=217559&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/tests/unit/tsan_flags_test.cc (original)
+++ compiler-rt/trunk/lib/tsan/tests/unit/tsan_flags_test.cc Wed Sep 10 18:08:06 2014
@@ -45,8 +45,6 @@ static const char *options1 =
" report_signal_unsafe=0"
" report_atomic_races=0"
" force_seq_cst_atomics=0"
- " suppressions=qwerty"
- " print_suppressions=0"
" print_benign=0"
" exitcode=111"
" halt_on_error=0"
@@ -60,22 +58,6 @@ static const char *options1 =
" history_size=5"
" io_sync=1"
" die_after_fork=true"
-
- " symbolize=0"
- " external_symbolizer_path=asdfgh"
- " allow_addr2line=true"
- " strip_path_prefix=zxcvb"
- " fast_unwind_on_fatal=0"
- " fast_unwind_on_malloc=0"
- " handle_ioctl=0"
- " malloc_context_size=777"
- " log_path=aaa"
- " verbosity=2"
- " detect_leaks=0"
- " leak_check_at_exit=0"
- " allocator_may_return_null=0"
- " print_summary=0"
- " legacy_pthread_cond=0"
"";
static const char *options2 =
@@ -89,8 +71,6 @@ static const char *options2 =
" report_signal_unsafe=true"
" report_atomic_races=true"
" force_seq_cst_atomics=true"
- " suppressions=aaaaa"
- " print_suppressions=true"
" print_benign=true"
" exitcode=222"
" halt_on_error=true"
@@ -104,22 +84,6 @@ static const char *options2 =
" history_size=6"
" io_sync=2"
" die_after_fork=false"
-
- " symbolize=true"
- " external_symbolizer_path=cccccc"
- " allow_addr2line=false"
- " strip_path_prefix=ddddddd"
- " fast_unwind_on_fatal=true"
- " fast_unwind_on_malloc=true"
- " handle_ioctl=true"
- " malloc_context_size=567"
- " log_path=eeeeeee"
- " verbosity=0"
- " detect_leaks=true"
- " leak_check_at_exit=true"
- " allocator_may_return_null=true"
- " print_summary=true"
- " legacy_pthread_cond=true"
"";
void VerifyOptions1(Flags *f) {
@@ -133,8 +97,6 @@ void VerifyOptions1(Flags *f) {
EXPECT_EQ(f->report_signal_unsafe, 0);
EXPECT_EQ(f->report_atomic_races, 0);
EXPECT_EQ(f->force_seq_cst_atomics, 0);
- EXPECT_EQ(f->suppressions, std::string("qwerty"));
- EXPECT_EQ(f->print_suppressions, 0);
EXPECT_EQ(f->print_benign, 0);
EXPECT_EQ(f->exitcode, 111);
EXPECT_EQ(f->halt_on_error, 0);
@@ -148,22 +110,6 @@ void VerifyOptions1(Flags *f) {
EXPECT_EQ(f->history_size, 5);
EXPECT_EQ(f->io_sync, 1);
EXPECT_EQ(f->die_after_fork, true);
-
- EXPECT_EQ(f->symbolize, 0);
- EXPECT_EQ(f->external_symbolizer_path, std::string("asdfgh"));
- EXPECT_EQ(f->allow_addr2line, true);
- EXPECT_EQ(f->strip_path_prefix, std::string("zxcvb"));
- EXPECT_EQ(f->fast_unwind_on_fatal, 0);
- EXPECT_EQ(f->fast_unwind_on_malloc, 0);
- EXPECT_EQ(f->handle_ioctl, 0);
- EXPECT_EQ(f->malloc_context_size, 777);
- EXPECT_EQ(f->log_path, std::string("aaa"));
- EXPECT_EQ(f->verbosity, 2);
- EXPECT_EQ(f->detect_leaks, 0);
- EXPECT_EQ(f->leak_check_at_exit, 0);
- EXPECT_EQ(f->allocator_may_return_null, 0);
- EXPECT_EQ(f->print_summary, 0);
- EXPECT_EQ(f->legacy_pthread_cond, false);
}
void VerifyOptions2(Flags *f) {
@@ -177,8 +123,6 @@ void VerifyOptions2(Flags *f) {
EXPECT_EQ(f->report_signal_unsafe, true);
EXPECT_EQ(f->report_atomic_races, true);
EXPECT_EQ(f->force_seq_cst_atomics, true);
- EXPECT_EQ(f->suppressions, std::string("aaaaa"));
- EXPECT_EQ(f->print_suppressions, true);
EXPECT_EQ(f->print_benign, true);
EXPECT_EQ(f->exitcode, 222);
EXPECT_EQ(f->halt_on_error, true);
@@ -192,22 +136,6 @@ void VerifyOptions2(Flags *f) {
EXPECT_EQ(f->history_size, 6);
EXPECT_EQ(f->io_sync, 2);
EXPECT_EQ(f->die_after_fork, false);
-
- EXPECT_EQ(f->symbolize, true);
- EXPECT_EQ(f->external_symbolizer_path, std::string("cccccc"));
- EXPECT_EQ(f->allow_addr2line, false);
- EXPECT_EQ(f->strip_path_prefix, std::string("ddddddd"));
- EXPECT_EQ(f->fast_unwind_on_fatal, true);
- EXPECT_EQ(f->fast_unwind_on_malloc, true);
- EXPECT_EQ(f->handle_ioctl, true);
- EXPECT_EQ(f->malloc_context_size, 567);
- EXPECT_EQ(f->log_path, std::string("eeeeeee"));
- EXPECT_EQ(f->verbosity, 0);
- EXPECT_EQ(f->detect_leaks, true);
- EXPECT_EQ(f->leak_check_at_exit, true);
- EXPECT_EQ(f->allocator_may_return_null, true);
- EXPECT_EQ(f->print_summary, true);
- EXPECT_EQ(f->legacy_pthread_cond, true);
}
static const char *test_default_options;
More information about the llvm-commits
mailing list