annotate libsanitizer/ubsan/ubsan_init.cc @ 136:4627f235cf2a

fix c-next example
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 08 Nov 2018 14:11:56 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 //===-- ubsan_init.cc -----------------------------------------------------===//
kono
parents:
diff changeset
2 //
kono
parents:
diff changeset
3 // This file is distributed under the University of Illinois Open Source
kono
parents:
diff changeset
4 // License. See LICENSE.TXT for details.
kono
parents:
diff changeset
5 //
kono
parents:
diff changeset
6 //===----------------------------------------------------------------------===//
kono
parents:
diff changeset
7 //
kono
parents:
diff changeset
8 // Initialization of UBSan runtime.
kono
parents:
diff changeset
9 //
kono
parents:
diff changeset
10 //===----------------------------------------------------------------------===//
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 #include "ubsan_platform.h"
kono
parents:
diff changeset
13 #if CAN_SANITIZE_UB
kono
parents:
diff changeset
14 #include "ubsan_diag.h"
kono
parents:
diff changeset
15 #include "ubsan_init.h"
kono
parents:
diff changeset
16 #include "ubsan_flags.h"
kono
parents:
diff changeset
17 #include "sanitizer_common/sanitizer_common.h"
kono
parents:
diff changeset
18 #include "sanitizer_common/sanitizer_libc.h"
kono
parents:
diff changeset
19 #include "sanitizer_common/sanitizer_mutex.h"
kono
parents:
diff changeset
20 #include "sanitizer_common/sanitizer_symbolizer.h"
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 using namespace __ubsan;
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 const char *__ubsan::GetSanititizerToolName() {
kono
parents:
diff changeset
25 return "UndefinedBehaviorSanitizer";
kono
parents:
diff changeset
26 }
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 static bool ubsan_initialized;
kono
parents:
diff changeset
29 static StaticSpinMutex ubsan_init_mu;
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 static void CommonInit() {
kono
parents:
diff changeset
32 InitializeSuppressions();
kono
parents:
diff changeset
33 }
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 static void CommonStandaloneInit() {
kono
parents:
diff changeset
36 SanitizerToolName = GetSanititizerToolName();
kono
parents:
diff changeset
37 CacheBinaryName();
kono
parents:
diff changeset
38 InitializeFlags();
kono
parents:
diff changeset
39 __sanitizer_set_report_path(common_flags()->log_path);
kono
parents:
diff changeset
40 AndroidLogInit();
kono
parents:
diff changeset
41 InitializeCoverage(common_flags()->coverage, common_flags()->coverage_dir);
kono
parents:
diff changeset
42 CommonInit();
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 void __ubsan::InitAsStandalone() {
kono
parents:
diff changeset
46 SpinMutexLock l(&ubsan_init_mu);
kono
parents:
diff changeset
47 if (!ubsan_initialized) {
kono
parents:
diff changeset
48 CommonStandaloneInit();
kono
parents:
diff changeset
49 ubsan_initialized = true;
kono
parents:
diff changeset
50 }
kono
parents:
diff changeset
51 }
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 void __ubsan::InitAsStandaloneIfNecessary() { return InitAsStandalone(); }
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 void __ubsan::InitAsPlugin() {
kono
parents:
diff changeset
56 SpinMutexLock l(&ubsan_init_mu);
kono
parents:
diff changeset
57 if (!ubsan_initialized) {
kono
parents:
diff changeset
58 CommonInit();
kono
parents:
diff changeset
59 ubsan_initialized = true;
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61 }
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 #endif // CAN_SANITIZE_UB