]>
Commit | Line | Data |
---|---|---|
866e32ad KS |
1 | //===-- ubsan_flags.cc ----------------------------------------------------===// |
2 | // | |
3 | // This file is distributed under the University of Illinois Open Source | |
4 | // License. See LICENSE.TXT for details. | |
5 | // | |
6 | //===----------------------------------------------------------------------===// | |
7 | // | |
8 | // Runtime flags for UndefinedBehaviorSanitizer. | |
9 | // | |
10 | //===----------------------------------------------------------------------===// | |
11 | ||
696d846a MO |
12 | #include "ubsan_platform.h" |
13 | #if CAN_SANITIZE_UB | |
866e32ad KS |
14 | #include "ubsan_flags.h" |
15 | #include "sanitizer_common/sanitizer_common.h" | |
16 | #include "sanitizer_common/sanitizer_flags.h" | |
696d846a | 17 | #include "sanitizer_common/sanitizer_flag_parser.h" |
866e32ad KS |
18 | |
19 | namespace __ubsan { | |
20 | ||
696d846a | 21 | const char *MaybeCallUbsanDefaultOptions() { |
866e32ad KS |
22 | return (&__ubsan_default_options) ? __ubsan_default_options() : ""; |
23 | } | |
24 | ||
866e32ad KS |
25 | Flags ubsan_flags; |
26 | ||
696d846a MO |
27 | void Flags::SetDefaults() { |
28 | #define UBSAN_FLAG(Type, Name, DefaultValue, Description) Name = DefaultValue; | |
29 | #include "ubsan_flags.inc" | |
30 | #undef UBSAN_FLAG | |
31 | } | |
32 | ||
33 | void RegisterUbsanFlags(FlagParser *parser, Flags *f) { | |
34 | #define UBSAN_FLAG(Type, Name, DefaultValue, Description) \ | |
35 | RegisterFlag(parser, #Name, Description, &f->Name); | |
36 | #include "ubsan_flags.inc" | |
37 | #undef UBSAN_FLAG | |
866e32ad KS |
38 | } |
39 | ||
40 | void InitializeFlags() { | |
696d846a MO |
41 | SetCommonFlagsDefaults(); |
42 | { | |
43 | CommonFlags cf; | |
44 | cf.CopyFrom(*common_flags()); | |
45 | cf.print_summary = false; | |
5d3805fc | 46 | cf.external_symbolizer_path = GetEnv("UBSAN_SYMBOLIZER_PATH"); |
696d846a MO |
47 | OverrideCommonFlags(cf); |
48 | } | |
49 | ||
866e32ad | 50 | Flags *f = flags(); |
696d846a MO |
51 | f->SetDefaults(); |
52 | ||
53 | FlagParser parser; | |
54 | RegisterCommonFlags(&parser); | |
55 | RegisterUbsanFlags(&parser, f); | |
56 | ||
866e32ad | 57 | // Override from user-specified string. |
696d846a | 58 | parser.ParseString(MaybeCallUbsanDefaultOptions()); |
866e32ad | 59 | // Override from environment variable. |
696d846a | 60 | parser.ParseString(GetEnv("UBSAN_OPTIONS")); |
10189819 | 61 | InitializeCommonFlags(); |
696d846a MO |
62 | if (Verbosity()) ReportUnrecognizedFlags(); |
63 | ||
64 | if (common_flags()->help) parser.PrintFlagDescriptions(); | |
866e32ad KS |
65 | } |
66 | ||
67 | } // namespace __ubsan | |
68 | ||
5d3805fc JJ |
69 | SANITIZER_INTERFACE_WEAK_DEF(const char *, __ubsan_default_options, void) { |
70 | return ""; | |
71 | } | |
696d846a MO |
72 | |
73 | #endif // CAN_SANITIZE_UB |