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
#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"
// 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.