summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Samsonov <vonosmas@gmail.com>2014-07-29 23:49:20 +0000
committerAlexey Samsonov <vonosmas@gmail.com>2014-07-29 23:49:20 +0000
commitd0b88b45877abb60ad5c130493f07949664625bc (patch)
tree4ea49f23b8d5cf2bdf00f6ca13f75d56b62f7c7b
parentd137df1415f805e26caf3a245423733423acd69d (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.cc23
-rw-r--r--lib/ubsan/ubsan_flags.h1
-rw-r--r--lib/ubsan/ubsan_init.cc7
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.