]>
Commit | Line | Data |
---|---|---|
92a42be0 SL |
1 | //===-- ubsan_init.cc -----------------------------------------------------===// |
2 | // | |
3 | // The LLVM Compiler Infrastructure | |
4 | // | |
5 | // This file is distributed under the University of Illinois Open Source | |
6 | // License. See LICENSE.TXT for details. | |
7 | // | |
8 | //===----------------------------------------------------------------------===// | |
9 | // | |
10 | // Initialization of UBSan runtime. | |
11 | // | |
12 | //===----------------------------------------------------------------------===// | |
13 | ||
14 | #include "ubsan_platform.h" | |
15 | #if CAN_SANITIZE_UB | |
16 | #include "ubsan_diag.h" | |
17 | #include "ubsan_init.h" | |
18 | #include "ubsan_flags.h" | |
19 | #include "sanitizer_common/sanitizer_common.h" | |
20 | #include "sanitizer_common/sanitizer_libc.h" | |
21 | #include "sanitizer_common/sanitizer_mutex.h" | |
22 | #include "sanitizer_common/sanitizer_symbolizer.h" | |
23 | ||
24 | using namespace __ubsan; | |
25 | ||
2c00a5a8 XL |
26 | const char *__ubsan::GetSanititizerToolName() { |
27 | return "UndefinedBehaviorSanitizer"; | |
28 | } | |
29 | ||
30 | static bool ubsan_initialized; | |
92a42be0 SL |
31 | static StaticSpinMutex ubsan_init_mu; |
32 | ||
33 | static void CommonInit() { | |
34 | InitializeSuppressions(); | |
35 | } | |
36 | ||
37 | static void CommonStandaloneInit() { | |
2c00a5a8 | 38 | SanitizerToolName = GetSanititizerToolName(); |
92a42be0 | 39 | CacheBinaryName(); |
2c00a5a8 | 40 | InitializeFlags(); |
92a42be0 | 41 | __sanitizer_set_report_path(common_flags()->log_path); |
7cac9316 | 42 | AndroidLogInit(); |
92a42be0 SL |
43 | InitializeCoverage(common_flags()->coverage, common_flags()->coverage_dir); |
44 | CommonInit(); | |
92a42be0 SL |
45 | } |
46 | ||
47 | void __ubsan::InitAsStandalone() { | |
92a42be0 | 48 | SpinMutexLock l(&ubsan_init_mu); |
2c00a5a8 | 49 | if (!ubsan_initialized) { |
92a42be0 | 50 | CommonStandaloneInit(); |
2c00a5a8 | 51 | ubsan_initialized = true; |
92a42be0 | 52 | } |
92a42be0 SL |
53 | } |
54 | ||
2c00a5a8 XL |
55 | void __ubsan::InitAsStandaloneIfNecessary() { return InitAsStandalone(); } |
56 | ||
92a42be0 | 57 | void __ubsan::InitAsPlugin() { |
92a42be0 | 58 | SpinMutexLock l(&ubsan_init_mu); |
2c00a5a8 XL |
59 | if (!ubsan_initialized) { |
60 | CommonInit(); | |
61 | ubsan_initialized = true; | |
62 | } | |
92a42be0 SL |
63 | } |
64 | ||
65 | #endif // CAN_SANITIZE_UB |