summaryrefslogtreecommitdiff
path: root/lib/asan/asan_flags.cc
diff options
context:
space:
mode:
authorAlexey Samsonov <vonosmas@gmail.com>2014-12-22 21:46:10 +0000
committerAlexey Samsonov <vonosmas@gmail.com>2014-12-22 21:46:10 +0000
commitf90d757687ce94eefb139c7db9b9a9b65eab00c5 (patch)
treeaed2bb1f31cbfc17f9839f7d5066b45dd5718eca /lib/asan/asan_flags.cc
parent95dab99736e13ec0a7d106b41c7efc21ebf93acf (diff)
[Sanitizer] Make CommonFlags immutable after initialization.
Summary: Protect CommonFlags singleton by adding const qualifier to common_flags() accessor. The only ways to modify the flags are SetCommonFlagsDefaults(), ParseCommonFlagsFromString() and OverrideCommonFlags() functions, which are only supposed to be called during initialization. Test Plan: regression test suite Reviewers: kcc, eugenis, glider Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D6741 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@224736 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/asan/asan_flags.cc')
-rw-r--r--lib/asan/asan_flags.cc20
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/asan/asan_flags.cc b/lib/asan/asan_flags.cc
index 4099de205..7db1f020c 100644
--- a/lib/asan/asan_flags.cc
+++ b/lib/asan/asan_flags.cc
@@ -172,13 +172,15 @@ void ParseFlagsFromString(Flags *f, const char *str) {
}
void InitializeFlags(Flags *f) {
- CommonFlags *cf = common_flags();
SetCommonFlagsDefaults();
- cf->detect_leaks = CAN_SANITIZE_LEAKS;
- cf->external_symbolizer_path = GetEnv("ASAN_SYMBOLIZER_PATH");
- cf->malloc_context_size = kDefaultMallocContextSize;
- cf->intercept_tls_get_addr = true;
- cf->coverage = false;
+ {
+ CommonFlags cf = *common_flags();
+ cf.detect_leaks = CAN_SANITIZE_LEAKS;
+ cf.external_symbolizer_path = GetEnv("ASAN_SYMBOLIZER_PATH");
+ cf.malloc_context_size = kDefaultMallocContextSize;
+ cf.intercept_tls_get_addr = true;
+ OverrideCommonFlags(cf);
+ }
internal_memset(f, 0, sizeof(*f));
f->quarantine_size = (ASAN_LOW_MEMORY) ? 1UL << 26 : 1UL << 28;
@@ -258,17 +260,17 @@ void InitializeFlags(Flags *f) {
}
// Flag validation:
- if (!CAN_SANITIZE_LEAKS && cf->detect_leaks) {
+ if (!CAN_SANITIZE_LEAKS && common_flags()->detect_leaks) {
Report("%s: detect_leaks is not supported on this platform.\n",
SanitizerToolName);
- cf->detect_leaks = false;
+ Die();
}
// Make "strict_init_order" imply "check_initialization_order".
// TODO(samsonov): Use a single runtime flag for an init-order checker.
if (f->strict_init_order) {
f->check_initialization_order = true;
}
- CHECK_LE((uptr)cf->malloc_context_size, kStackTraceMax);
+ CHECK_LE((uptr)common_flags()->malloc_context_size, kStackTraceMax);
CHECK_LE(f->min_uar_stack_size_log, f->max_uar_stack_size_log);
CHECK_GE(f->redzone, 16);
CHECK_GE(f->max_redzone, f->redzone);