diff options
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_flags.cc | 6 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_flags.h | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/ubsan/ubsan_flags.cc | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/ubsan/ubsan_flags.h | 1 | ||||
| -rw-r--r-- | compiler-rt/lib/ubsan/ubsan_init.cc | 8 | ||||
| -rw-r--r-- | compiler-rt/test/ubsan/TestCases/TypeCheck/Function/function.cpp | 2 | ||||
| -rw-r--r-- | compiler-rt/test/ubsan/TestCases/TypeCheck/vptr.cpp | 16 |
7 files changed, 21 insertions, 18 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_flags.cc b/compiler-rt/lib/sanitizer_common/sanitizer_flags.cc index 881cc3e7faa..8482751ecae 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_flags.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_flags.cc @@ -20,6 +20,7 @@ namespace __sanitizer { CommonFlags common_flags_dont_use; +bool common_flags_defaults_set = false; struct FlagDescription { const char *name; @@ -35,6 +36,11 @@ IntrusiveList<FlagDescription> flag_descriptions; #endif void SetCommonFlagsDefaults(CommonFlags *f) { + CHECK_EQ(common_flags(), f); + if (common_flags_defaults_set) + return; + common_flags_defaults_set = true; + f->symbolize = true; f->external_symbolizer_path = 0; f->allow_addr2line = false; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_flags.h b/compiler-rt/lib/sanitizer_common/sanitizer_flags.h index 97641a6c49f..256ca8ce847 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_flags.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_flags.h @@ -67,7 +67,10 @@ inline CommonFlags *common_flags() { return &common_flags_dont_use; } +// Sets default values for common flags. If called multiple times, +// sets default values only once. void SetCommonFlagsDefaults(CommonFlags *f); + void ParseCommonFlagsFromString(CommonFlags *f, const char *str); void PrintFlagDescriptions(); diff --git a/compiler-rt/lib/ubsan/ubsan_flags.cc b/compiler-rt/lib/ubsan/ubsan_flags.cc index 843f9a6c591..ae15fd389b1 100644 --- a/compiler-rt/lib/ubsan/ubsan_flags.cc +++ b/compiler-rt/lib/ubsan/ubsan_flags.cc @@ -28,7 +28,7 @@ static const char *GetRuntimeFlagsFromCompileDefinition() { #endif } -void InitializeCommonFlags() { +static void InitializeCommonFlags() { CommonFlags *cf = common_flags(); SetCommonFlagsDefaults(cf); cf->print_summary = false; @@ -50,6 +50,7 @@ static void ParseFlagsFromString(Flags *f, const char *str) { } void InitializeFlags() { + InitializeCommonFlags(); Flags *f = flags(); // Default values. f->halt_on_error = false; diff --git a/compiler-rt/lib/ubsan/ubsan_flags.h b/compiler-rt/lib/ubsan/ubsan_flags.h index 3b1a59e4e19..f41afbd07ac 100644 --- a/compiler-rt/lib/ubsan/ubsan_flags.h +++ b/compiler-rt/lib/ubsan/ubsan_flags.h @@ -23,7 +23,6 @@ struct Flags { extern Flags ubsan_flags; inline Flags *flags() { return &ubsan_flags; } -void InitializeCommonFlags(); void InitializeFlags(); } // namespace __ubsan diff --git a/compiler-rt/lib/ubsan/ubsan_init.cc b/compiler-rt/lib/ubsan/ubsan_init.cc index 6080e304c12..2649346b1e2 100644 --- a/compiler-rt/lib/ubsan/ubsan_init.cc +++ b/compiler-rt/lib/ubsan/ubsan_init.cc @@ -32,15 +32,9 @@ void __ubsan::InitIfNecessary() { if (LIKELY(ubsan_inited)) return; if (0 == internal_strcmp(SanitizerToolName, "SanitizerTool")) { - // WARNING: If this condition holds, then either UBSan runs in a standalone - // mode, or initializer for another sanitizer hasn't run yet. In a latter - // case, another sanitizer will overwrite "SanitizerToolName" and reparse - // common flags. It means, that we are not allowed to *use* common flags - // in this function. + // This will be overwritten if another sanitizer will initialize later. SanitizerToolName = "UndefinedBehaviorSanitizer"; - InitializeCommonFlags(); } - // Initialize UBSan-specific flags. InitializeFlags(); SuppressionContext::InitIfNecessary(); ubsan_inited = true; diff --git a/compiler-rt/test/ubsan/TestCases/TypeCheck/Function/function.cpp b/compiler-rt/test/ubsan/TestCases/TypeCheck/Function/function.cpp index deca77d459c..17a84c2792b 100644 --- a/compiler-rt/test/ubsan/TestCases/TypeCheck/Function/function.cpp +++ b/compiler-rt/test/ubsan/TestCases/TypeCheck/Function/function.cpp @@ -1,7 +1,7 @@ // RUN: %clangxx -fsanitize=function %s -O3 -g -o %t // RUN: %run %t 2>&1 | FileCheck %s // Verify that we can disable symbolization if needed: -// RUN: UBSAN_OPTIONS=symbolize=0 ASAN_OPTIONS=symbolize=0 %run %t 2>&1 | FileCheck %s --check-prefix=NOSYM +// RUN: UBSAN_OPTIONS=symbolize=0 %run %t 2>&1 | FileCheck %s --check-prefix=NOSYM // -fsanitize=function is unsupported on Darwin yet. // XFAIL: darwin diff --git a/compiler-rt/test/ubsan/TestCases/TypeCheck/vptr.cpp b/compiler-rt/test/ubsan/TestCases/TypeCheck/vptr.cpp index 45b7125f845..f7fa2ea6224 100644 --- a/compiler-rt/test/ubsan/TestCases/TypeCheck/vptr.cpp +++ b/compiler-rt/test/ubsan/TestCases/TypeCheck/vptr.cpp @@ -12,16 +12,16 @@ // RUN: UBSAN_OPTIONS=print_stacktrace=1 %run %t m0 2>&1 | FileCheck %s --check-prefix=CHECK-NULL-MEMBER --strict-whitespace // RUN: (echo "vptr_check:S"; echo "vptr_check:T"; echo "vptr_check:U") > %t.supp -// RUN: ASAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t mS 2>&1 -// RUN: ASAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t fS 2>&1 -// RUN: ASAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t cS 2>&1 -// RUN: ASAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t mV 2>&1 -// RUN: ASAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t fV 2>&1 -// RUN: ASAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t cV 2>&1 -// RUN: ASAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t oU 2>&1 +// RUN: UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t mS 2>&1 +// RUN: UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t fS 2>&1 +// RUN: UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t cS 2>&1 +// RUN: UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t mV 2>&1 +// RUN: UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t fV 2>&1 +// RUN: UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t cV 2>&1 +// RUN: UBSAN_OPTIONS=suppressions=%t.supp:halt_on_error=1 %run %t oU 2>&1 // RUN: echo "vptr_check:S" > %t.loc-supp -// RUN: ASAN_OPTIONS=suppressions=%t.loc-supp:halt_on_error=1 UBSAN_OPTIONS=suppressions=%t.loc-supp:halt_on_error=1 not %run %t x- 2>&1 | FileCheck %s --check-prefix=CHECK-LOC-SUPPRESS +// RUN: UBSAN_OPTIONS=suppressions=%t.loc-supp:halt_on_error=1 not %run %t x- 2>&1 | FileCheck %s --check-prefix=CHECK-LOC-SUPPRESS // FIXME: This test produces linker errors on Darwin. // XFAIL: darwin |

