diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2015-01-20 13:21:20 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2015-01-20 13:21:20 +0000 |
commit | e11473fe06f0d0c0e8e42fa5f6282a70904b5ec6 (patch) | |
tree | d9e89fe1bb6466d4145616d47ea6eef6f200c8ac /lib | |
parent | bd5b2c8481f24907795e0138b313f00063ddc35a (diff) |
[asan] Allow changing verbosity in activation flags.
This change removes some debug output in asan_flags.cc that
was reading the verbosity level before all the flags were parsed.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@226566 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/asan/asan_activation.cc | 7 | ||||
-rw-r--r-- | lib/asan/asan_activation_flags.inc | 1 | ||||
-rw-r--r-- | lib/asan/asan_fake_stack.cc | 2 | ||||
-rw-r--r-- | lib/asan/asan_flags.cc | 15 | ||||
-rw-r--r-- | lib/asan/asan_mac.cc | 6 | ||||
-rw-r--r-- | lib/asan/asan_poisoning.cc | 4 | ||||
-rw-r--r-- | lib/asan/asan_rtl.cc | 3 | ||||
-rw-r--r-- | lib/lsan/lsan_common.cc | 4 | ||||
-rw-r--r-- | lib/msan/msan.cc | 4 | ||||
-rw-r--r-- | lib/msan/msan_report.cc | 2 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common.cc | 2 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common.h | 12 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common_libcdep.cc | 2 | ||||
-rw-r--r-- | lib/tsan/dd/dd_rtl.cc | 1 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_flags.cc | 4 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_rtl.cc | 3 | ||||
-rw-r--r-- | lib/ubsan/ubsan_flags.cc | 1 |
17 files changed, 45 insertions, 28 deletions
diff --git a/lib/asan/asan_activation.cc b/lib/asan/asan_activation.cc index 50ba30bcb..3bc019848 100644 --- a/lib/asan/asan_activation.cc +++ b/lib/asan/asan_activation.cc @@ -53,6 +53,7 @@ static struct AsanDeactivatedFlags { f.poison_heap = poison_heap; cf.coverage = coverage; cf.coverage_dir = coverage_dir; + cf.verbosity = Verbosity(); cf.help = false; // this is activation-specific help // Check if activation flags need to be overriden. @@ -65,7 +66,9 @@ static struct AsanDeactivatedFlags { GetExtraActivationFlags(buf, sizeof(buf)); parser.ParseString(buf); - if (common_flags()->verbosity) ReportUnrecognizedFlags(); + SetVerbosity(cf.verbosity); + + if (Verbosity()) ReportUnrecognizedFlags(); if (cf.help) parser.PrintFlagDescriptions(); @@ -130,7 +133,7 @@ void AsanActivate() { ReInitializeAllocator(asan_deactivated_flags.allocator_options); asan_is_deactivated = false; - if (common_flags()->verbosity) { + if (Verbosity()) { Report("Activated with flags:\n"); asan_deactivated_flags.Print(); } diff --git a/lib/asan/asan_activation_flags.inc b/lib/asan/asan_activation_flags.inc index 4f891f9cd..d4c089ec6 100644 --- a/lib/asan/asan_activation_flags.inc +++ b/lib/asan/asan_activation_flags.inc @@ -31,4 +31,5 @@ COMMON_ACTIVATION_FLAG(bool, allocator_may_return_null) COMMON_ACTIVATION_FLAG(int, malloc_context_size) COMMON_ACTIVATION_FLAG(bool, coverage) COMMON_ACTIVATION_FLAG(const char *, coverage_dir) +COMMON_ACTIVATION_FLAG(int, verbosity) COMMON_ACTIVATION_FLAG(bool, help) diff --git a/lib/asan/asan_fake_stack.cc b/lib/asan/asan_fake_stack.cc index 86d285e36..bf4f1eb4c 100644 --- a/lib/asan/asan_fake_stack.cc +++ b/lib/asan/asan_fake_stack.cc @@ -60,7 +60,7 @@ FakeStack *FakeStack::Create(uptr stack_size_log) { void FakeStack::Destroy(int tid) { PoisonAll(0); - if (common_flags()->verbosity >= 2) { + if (Verbosity() >= 2) { InternalScopedString str(kNumberOfSizeClasses * 50); for (uptr class_id = 0; class_id < kNumberOfSizeClasses; class_id++) str.append("%zd: %zd/%zd; ", class_id, hint_position_[class_id], diff --git a/lib/asan/asan_flags.cc b/lib/asan/asan_flags.cc index 811007854..1d82ab0e7 100644 --- a/lib/asan/asan_flags.cc +++ b/lib/asan/asan_flags.cc @@ -79,14 +79,10 @@ void InitializeFlags(Flags *f) { // Override from user-specified string. const char *default_options = MaybeCallAsanDefaultOptions(); parser.ParseString(default_options); - VReport(1, "Using the defaults from __asan_default_options: %s\n", - MaybeCallAsanDefaultOptions()); // Override from command line. - if (const char *env = GetEnv("ASAN_OPTIONS")) { - parser.ParseString(env); - VReport(1, "Parsed ASAN_OPTIONS: %s\n", env); - } + const char *env = GetEnv("ASAN_OPTIONS"); + if (env) parser.ParseString(env); // Let activation flags override current settings. On Android they come // from a system property. On other platforms this is no-op. @@ -94,11 +90,12 @@ void InitializeFlags(Flags *f) { char buf[100]; GetExtraActivationFlags(buf, sizeof(buf)); parser.ParseString(buf); - if (buf[0] != '\0') - VReport(1, "Parsed activation flags: %s\n", buf); } - if (common_flags()->verbosity) ReportUnrecognizedFlags(); + SetVerbosity(common_flags()->verbosity); + + // TODO(eugenis): dump all flags at verbosity>=2? + if (Verbosity()) ReportUnrecognizedFlags(); if (common_flags()->help) parser.PrintFlagDescriptions(); diff --git a/lib/asan/asan_mac.cc b/lib/asan/asan_mac.cc index 202361420..2e0b2d372 100644 --- a/lib/asan/asan_mac.cc +++ b/lib/asan/asan_mac.cc @@ -313,7 +313,7 @@ asan_block_context_t *alloc_asan_context(void *ctxt, dispatch_function_t func, dispatch_function_t func) { \ GET_STACK_TRACE_THREAD; \ asan_block_context_t *asan_ctxt = alloc_asan_context(ctxt, func, &stack); \ - if (common_flags()->verbosity >= 2) { \ + if (Verbosity() >= 2) { \ Report(#dispatch_x_f "(): context: %p, pthread_self: %p\n", \ asan_ctxt, pthread_self()); \ PRINT_CURRENT_STACK(); \ @@ -331,7 +331,7 @@ INTERCEPTOR(void, dispatch_after_f, dispatch_time_t when, dispatch_function_t func) { GET_STACK_TRACE_THREAD; asan_block_context_t *asan_ctxt = alloc_asan_context(ctxt, func, &stack); - if (common_flags()->verbosity >= 2) { + if (Verbosity() >= 2) { Report("dispatch_after_f: %p\n", asan_ctxt); PRINT_CURRENT_STACK(); } @@ -344,7 +344,7 @@ INTERCEPTOR(void, dispatch_group_async_f, dispatch_group_t group, dispatch_function_t func) { GET_STACK_TRACE_THREAD; asan_block_context_t *asan_ctxt = alloc_asan_context(ctxt, func, &stack); - if (common_flags()->verbosity >= 2) { + if (Verbosity() >= 2) { Report("dispatch_group_async_f(): context: %p, pthread_self: %p\n", asan_ctxt, pthread_self()); PRINT_CURRENT_STACK(); diff --git a/lib/asan/asan_poisoning.cc b/lib/asan/asan_poisoning.cc index 11fa271b2..e2b1f4dc4 100644 --- a/lib/asan/asan_poisoning.cc +++ b/lib/asan/asan_poisoning.cc @@ -74,10 +74,10 @@ void FlushUnneededASanShadowMemory(uptr p, uptr size) { void AsanPoisonOrUnpoisonIntraObjectRedzone(uptr ptr, uptr size, bool poison) { uptr end = ptr + size; - if (common_flags()->verbosity) { + if (Verbosity()) { Printf("__asan_%spoison_intra_object_redzone [%p,%p) %zd\n", poison ? "" : "un", ptr, end, size); - if (common_flags()->verbosity >= 2) + if (Verbosity() >= 2) PRINT_CURRENT_STACK(); } CHECK(size); diff --git a/lib/asan/asan_rtl.cc b/lib/asan/asan_rtl.cc index db258e73e..63cbb3f6f 100644 --- a/lib/asan/asan_rtl.cc +++ b/lib/asan/asan_rtl.cc @@ -353,8 +353,7 @@ static void AsanInitInternal() { } #endif - if (common_flags()->verbosity) - PrintAddressSpaceLayout(); + if (Verbosity()) PrintAddressSpaceLayout(); DisableCoreDumperIfNecessary(); diff --git a/lib/lsan/lsan_common.cc b/lib/lsan/lsan_common.cc index 0f74a7ac2..ff1f83b8c 100644 --- a/lib/lsan/lsan_common.cc +++ b/lib/lsan/lsan_common.cc @@ -75,7 +75,9 @@ static void InitializeFlags(bool standalone) { const char *options = GetEnv("LSAN_OPTIONS"); parser.ParseString(options); - if (common_flags()->verbosity) ReportUnrecognizedFlags(); + SetVerbosity(common_flags()->verbosity); + + if (Verbosity()) ReportUnrecognizedFlags(); if (!help_before && common_flags()->help) parser.PrintFlagDescriptions(); diff --git a/lib/msan/msan.cc b/lib/msan/msan.cc index e8aeb4539..8b70027bf 100644 --- a/lib/msan/msan.cc +++ b/lib/msan/msan.cc @@ -157,7 +157,9 @@ static void InitializeFlags(Flags *f, const char *options) { parser.ParseString(options); - if (common_flags()->verbosity) ReportUnrecognizedFlags(); + SetVerbosity(common_flags()->verbosity); + + if (Verbosity()) ReportUnrecognizedFlags(); if (common_flags()->help) parser.PrintFlagDescriptions(); diff --git a/lib/msan/msan_report.cc b/lib/msan/msan_report.cc index 717c4a958..6867ee369 100644 --- a/lib/msan/msan_report.cc +++ b/lib/msan/msan_report.cc @@ -255,7 +255,7 @@ void ReportUMRInsideAddressRange(const char *what, const void *start, uptr size, Printf("%sUninitialized bytes in %s%s%s at offset %zu inside [%p, %zu)%s\n", d.Warning(), d.Name(), what, d.Warning(), offset, start, size, d.End()); - if (__sanitizer::common_flags()->verbosity > 0) + if (__sanitizer::Verbosity()) DescribeMemoryRange(start, size); } diff --git a/lib/sanitizer_common/sanitizer_common.cc b/lib/sanitizer_common/sanitizer_common.cc index ae8d85d43..489081e07 100644 --- a/lib/sanitizer_common/sanitizer_common.cc +++ b/lib/sanitizer_common/sanitizer_common.cc @@ -21,6 +21,8 @@ namespace __sanitizer { const char *SanitizerToolName = "SanitizerTool"; +atomic_uint32_t current_verbosity; + uptr GetPageSizeCached() { static uptr PageSize; if (!PageSize) diff --git a/lib/sanitizer_common/sanitizer_common.h b/lib/sanitizer_common/sanitizer_common.h index e5153a082..d1b8ab760 100644 --- a/lib/sanitizer_common/sanitizer_common.h +++ b/lib/sanitizer_common/sanitizer_common.h @@ -41,6 +41,14 @@ const uptr kMaxThreadStackSize = 1 << 30; // 1Gb extern const char *SanitizerToolName; // Can be changed by the tool. +extern atomic_uint32_t current_verbosity; +INLINE void SetVerbosity(int verbosity) { + atomic_store(¤t_verbosity, verbosity, memory_order_relaxed); +} +INLINE int Verbosity() { + return atomic_load(¤t_verbosity, memory_order_relaxed); +} + uptr GetPageSize(); uptr GetPageSizeCached(); uptr GetMmapGranularity(); @@ -136,11 +144,11 @@ void Report(const char *format, ...); void SetPrintfAndReportCallback(void (*callback)(const char *)); #define VReport(level, ...) \ do { \ - if ((uptr)common_flags()->verbosity >= (level)) Report(__VA_ARGS__); \ + if ((uptr)Verbosity() >= (level)) Report(__VA_ARGS__); \ } while (0) #define VPrintf(level, ...) \ do { \ - if ((uptr)common_flags()->verbosity >= (level)) Printf(__VA_ARGS__); \ + if ((uptr)Verbosity() >= (level)) Printf(__VA_ARGS__); \ } while (0) // Can be used to prevent mixing error reports from different sanitizers. diff --git a/lib/sanitizer_common/sanitizer_common_libcdep.cc b/lib/sanitizer_common/sanitizer_common_libcdep.cc index 8c2d3f088..e357e1cbb 100644 --- a/lib/sanitizer_common/sanitizer_common_libcdep.cc +++ b/lib/sanitizer_common/sanitizer_common_libcdep.cc @@ -75,7 +75,7 @@ void BackgroundThread(void *arg) { while (true) { SleepForMillis(100); uptr current_rss_mb = GetRSS() >> 20; - if (common_flags()->verbosity) { + if (Verbosity()) { // If RSS has grown 10% since last time, print some information. if (prev_reported_rss * 11 / 10 < current_rss_mb) { Printf("%s: RSS: %zdMb\n", SanitizerToolName, current_rss_mb); diff --git a/lib/tsan/dd/dd_rtl.cc b/lib/tsan/dd/dd_rtl.cc index fe7077c20..2ba1ee324 100644 --- a/lib/tsan/dd/dd_rtl.cc +++ b/lib/tsan/dd/dd_rtl.cc @@ -85,6 +85,7 @@ void InitializeFlags(Flags *f, const char *env) { RegisterFlag(&parser, "second_deadlock_stack", "", &f->second_deadlock_stack); RegisterCommonFlags(&parser); parser.ParseString(env); + SetVerbosity(common_flags()->verbosity); } void Initialize() { diff --git a/lib/tsan/rtl/tsan_flags.cc b/lib/tsan/rtl/tsan_flags.cc index c809ee77f..fed3de8db 100644 --- a/lib/tsan/rtl/tsan_flags.cc +++ b/lib/tsan/rtl/tsan_flags.cc @@ -80,7 +80,9 @@ void InitializeFlags(Flags *f, const char *env) { f->report_signal_unsafe = false; } - if (common_flags()->verbosity) ReportUnrecognizedFlags(); + SetVerbosity(common_flags()->verbosity); + + if (Verbosity()) ReportUnrecognizedFlags(); if (common_flags()->help) parser.PrintFlagDescriptions(); diff --git a/lib/tsan/rtl/tsan_rtl.cc b/lib/tsan/rtl/tsan_rtl.cc index 30ea1ee51..90f765bd9 100644 --- a/lib/tsan/rtl/tsan_rtl.cc +++ b/lib/tsan/rtl/tsan_rtl.cc @@ -365,8 +365,7 @@ int Finalize(ThreadState *thr) { ctx->report_mtx.Unlock(); #ifndef SANITIZER_GO - if (common_flags()->verbosity) - AllocatorPrintStats(); + if (Verbosity()) AllocatorPrintStats(); #endif ThreadFinalize(thr); diff --git a/lib/ubsan/ubsan_flags.cc b/lib/ubsan/ubsan_flags.cc index 7bd23a8b1..0dbffc9b1 100644 --- a/lib/ubsan/ubsan_flags.cc +++ b/lib/ubsan/ubsan_flags.cc @@ -66,6 +66,7 @@ void InitializeFlags(bool standalone) { parser.ParseString(MaybeCallUbsanDefaultOptions()); // Override from environment variable. parser.ParseString(GetEnv("UBSAN_OPTIONS")); + SetVerbosity(common_flags()->verbosity); } } // namespace __ubsan |