brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · aea7ca0 Raw
77 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8//9// Initialization of UBSan runtime.10//11//===----------------------------------------------------------------------===//12 13#include "ubsan_platform.h"14#if CAN_SANITIZE_UB15#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 24using namespace __ubsan;25 26const char *__ubsan::GetSanititizerToolName() {27  return "UndefinedBehaviorSanitizer";28}29 30static bool ubsan_initialized;31static StaticSpinMutex ubsan_init_mu;32 33static void CommonInit() {34  InitializeSuppressions();35}36 37static void UbsanDie() {38  if (common_flags()->print_module_map >= 1)39    DumpProcessMap();40}41 42static void CommonStandaloneInit() {43  SanitizerToolName = GetSanititizerToolName();44  CacheBinaryName();45  InitializeFlags();46  __sanitizer_set_report_path(common_flags()->log_path);47  __sanitizer::InitializePlatformEarly();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 printing53  // the same information from multiple sanitizers' output54  AddDieCallback(UbsanDie);55  Symbolizer::LateInitialize();56}57 58void __ubsan::InitAsStandalone() {59  SpinMutexLock l(&ubsan_init_mu);60  if (!ubsan_initialized) {61    CommonStandaloneInit();62    ubsan_initialized = true;63  }64}65 66void __ubsan::InitAsStandaloneIfNecessary() { return InitAsStandalone(); }67 68void __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_UB77