diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2014-07-29 23:49:20 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2014-07-29 23:49:20 +0000 |
commit | d0b88b45877abb60ad5c130493f07949664625bc (patch) | |
tree | 4ea49f23b8d5cf2bdf00f6ca13f75d56b62f7c7b | |
parent | d137df1415f805e26caf3a245423733423acd69d (diff) |
[UBSan] Move all runtime flags parsing to ubsan_flags.cc.
No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@214258 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/ubsan/ubsan_flags.cc | 23 | ||||
-rw-r--r-- | lib/ubsan/ubsan_flags.h | 1 | ||||
-rw-r--r-- | lib/ubsan/ubsan_init.cc | 7 |
3 files changed, 19 insertions, 12 deletions
diff --git a/lib/ubsan/ubsan_flags.cc b/lib/ubsan/ubsan_flags.cc index 6c1adc963..e4c8953dd 100644 --- a/lib/ubsan/ubsan_flags.cc +++ b/lib/ubsan/ubsan_flags.cc @@ -17,18 +17,29 @@ namespace __ubsan { +void InitializeCommonFlags() { + CommonFlags *cf = common_flags(); + SetCommonFlagsDefaults(cf); + cf->print_summary = false; + // Common flags may be overriden in UBSAN_OPTIONS. + ParseCommonFlagsFromString(cf, GetEnv("UBSAN_OPTIONS")); +} + Flags ubsan_flags; +static void ParseFlagsFromString(Flags *f, const char *str) { + if (!str) + return; + ParseFlag(str, &f->print_stacktrace, "print_stacktrace", + "Include full stacktrace into an error report"); +} + void InitializeFlags() { Flags *f = flags(); // Default values. f->print_stacktrace = false; - - const char *options = GetEnv("UBSAN_OPTIONS"); - if (options) { - ParseFlag(options, &f->print_stacktrace, "print_stacktrace", - "Include full stacktrace into an error report"); - } + // Override from environment variable. + ParseFlagsFromString(f, GetEnv("UBSAN_OPTIONS")); } } // namespace __ubsan diff --git a/lib/ubsan/ubsan_flags.h b/lib/ubsan/ubsan_flags.h index db0a4e4aa..c8cbabf71 100644 --- a/lib/ubsan/ubsan_flags.h +++ b/lib/ubsan/ubsan_flags.h @@ -22,6 +22,7 @@ struct Flags { extern Flags ubsan_flags; inline Flags *flags() { return &ubsan_flags; } +void InitializeCommonFlags(); void InitializeFlags(); } // namespace __ubsan diff --git a/lib/ubsan/ubsan_init.cc b/lib/ubsan/ubsan_init.cc index 79f28c9d6..01fd17ab0 100644 --- a/lib/ubsan/ubsan_init.cc +++ b/lib/ubsan/ubsan_init.cc @@ -15,7 +15,6 @@ #include "ubsan_flags.h" #include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_libc.h" -#include "sanitizer_common/sanitizer_flags.h" #include "sanitizer_common/sanitizer_mutex.h" #include "sanitizer_common/sanitizer_symbolizer.h" @@ -38,11 +37,7 @@ void __ubsan::InitIfNecessary() { // common flags. It means, that we are not allowed to *use* common flags // in this function. SanitizerToolName = "UndefinedBehaviorSanitizer"; - CommonFlags *cf = common_flags(); - SetCommonFlagsDefaults(cf); - cf->print_summary = false; - // Common flags may only be modified via UBSAN_OPTIONS. - ParseCommonFlagsFromString(cf, GetEnv("UBSAN_OPTIONS")); + InitializeCommonFlags(); Symbolizer::GetOrInit(); } // Initialize UBSan-specific flags. |