Path: blob/main/contrib/llvm-project/compiler-rt/lib/ubsan/ubsan_init.cpp
35233 views
//===-- ubsan_init.cpp ----------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// Initialization of UBSan runtime.9//10//===----------------------------------------------------------------------===//1112#include "ubsan_platform.h"13#if CAN_SANITIZE_UB14#include "sanitizer_common/sanitizer_common.h"15#include "sanitizer_common/sanitizer_interface_internal.h"16#include "sanitizer_common/sanitizer_libc.h"17#include "sanitizer_common/sanitizer_mutex.h"18#include "sanitizer_common/sanitizer_symbolizer.h"19#include "ubsan_diag.h"20#include "ubsan_flags.h"21#include "ubsan_init.h"2223using namespace __ubsan;2425const char *__ubsan::GetSanititizerToolName() {26return "UndefinedBehaviorSanitizer";27}2829static bool ubsan_initialized;30static StaticSpinMutex ubsan_init_mu;3132static void CommonInit() {33InitializeSuppressions();34}3536static void UbsanDie() {37if (common_flags()->print_module_map >= 1)38DumpProcessMap();39}4041static void CommonStandaloneInit() {42SanitizerToolName = GetSanititizerToolName();43CacheBinaryName();44InitializeFlags();45__sanitizer::InitializePlatformEarly();46__sanitizer_set_report_path(common_flags()->log_path);47AndroidLogInit();48InitializeCoverage(common_flags()->coverage, common_flags()->coverage_dir);49CommonInit();5051// Only add die callback when running in standalone mode to avoid printing52// the same information from multiple sanitizers' output53AddDieCallback(UbsanDie);54Symbolizer::LateInitialize();55}5657void __ubsan::InitAsStandalone() {58SpinMutexLock l(&ubsan_init_mu);59if (!ubsan_initialized) {60CommonStandaloneInit();61ubsan_initialized = true;62}63}6465void __ubsan::InitAsStandaloneIfNecessary() { return InitAsStandalone(); }6667void __ubsan::InitAsPlugin() {68SpinMutexLock l(&ubsan_init_mu);69if (!ubsan_initialized) {70CommonInit();71ubsan_initialized = true;72}73}7475#endif // CAN_SANITIZE_UB767778