llvm-project

Форк
0
76 строк · 2.1 Кб
1
//===-- ubsan_init.cpp ----------------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// Initialization of UBSan runtime.
10
//
11
//===----------------------------------------------------------------------===//
12

13
#include "ubsan_platform.h"
14
#if CAN_SANITIZE_UB
15
#include "sanitizer_common/sanitizer_common.h"
16
#include "sanitizer_common/sanitizer_interface_internal.h"
17
#include "sanitizer_common/sanitizer_libc.h"
18
#include "sanitizer_common/sanitizer_mutex.h"
19
#include "sanitizer_common/sanitizer_symbolizer.h"
20
#include "ubsan_diag.h"
21
#include "ubsan_flags.h"
22
#include "ubsan_init.h"
23

24
using namespace __ubsan;
25

26
const char *__ubsan::GetSanititizerToolName() {
27
  return "UndefinedBehaviorSanitizer";
28
}
29

30
static bool ubsan_initialized;
31
static StaticSpinMutex ubsan_init_mu;
32

33
static void CommonInit() {
34
  InitializeSuppressions();
35
}
36

37
static void UbsanDie() {
38
  if (common_flags()->print_module_map >= 1)
39
    DumpProcessMap();
40
}
41

42
static void CommonStandaloneInit() {
43
  SanitizerToolName = GetSanititizerToolName();
44
  CacheBinaryName();
45
  InitializeFlags();
46
  __sanitizer::InitializePlatformEarly();
47
  __sanitizer_set_report_path(common_flags()->log_path);
48
  AndroidLogInit();
49
  InitializeCoverage(common_flags()->coverage, common_flags()->coverage_dir);
50
  CommonInit();
51

52
  // Only add die callback when running in standalone mode to avoid printing
53
  // the same information from multiple sanitizers' output
54
  AddDieCallback(UbsanDie);
55
  Symbolizer::LateInitialize();
56
}
57

58
void __ubsan::InitAsStandalone() {
59
  SpinMutexLock l(&ubsan_init_mu);
60
  if (!ubsan_initialized) {
61
    CommonStandaloneInit();
62
    ubsan_initialized = true;
63
  }
64
}
65

66
void __ubsan::InitAsStandaloneIfNecessary() { return InitAsStandalone(); }
67

68
void __ubsan::InitAsPlugin() {
69
  SpinMutexLock l(&ubsan_init_mu);
70
  if (!ubsan_initialized) {
71
    CommonInit();
72
    ubsan_initialized = true;
73
  }
74
}
75

76
#endif  // CAN_SANITIZE_UB
77

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.