Retro68/gcc/libsanitizer/ubsan/ubsan_init.cc

64 lines
1.6 KiB
C++
Raw Normal View History

2015-08-28 15:33:40 +00:00
//===-- ubsan_init.cc -----------------------------------------------------===//
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Initialization of UBSan runtime.
//
//===----------------------------------------------------------------------===//
2017-04-10 11:32:00 +00:00
#include "ubsan_platform.h"
#if CAN_SANITIZE_UB
#include "ubsan_diag.h"
2015-08-28 15:33:40 +00:00
#include "ubsan_init.h"
#include "ubsan_flags.h"
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_libc.h"
#include "sanitizer_common/sanitizer_mutex.h"
#include "sanitizer_common/sanitizer_symbolizer.h"
using namespace __ubsan;
2018-12-28 15:30:48 +00:00
const char *__ubsan::GetSanititizerToolName() {
return "UndefinedBehaviorSanitizer";
}
static bool ubsan_initialized;
2017-04-10 11:32:00 +00:00
static StaticSpinMutex ubsan_init_mu;
2015-08-28 15:33:40 +00:00
2017-04-10 11:32:00 +00:00
static void CommonInit() {
InitializeSuppressions();
}
static void CommonStandaloneInit() {
2018-12-28 15:30:48 +00:00
SanitizerToolName = GetSanititizerToolName();
2017-04-10 11:32:00 +00:00
CacheBinaryName();
2018-12-28 15:30:48 +00:00
InitializeFlags();
2017-04-10 11:32:00 +00:00
__sanitizer_set_report_path(common_flags()->log_path);
AndroidLogInit();
2017-04-10 11:32:00 +00:00
InitializeCoverage(common_flags()->coverage, common_flags()->coverage_dir);
CommonInit();
}
void __ubsan::InitAsStandalone() {
SpinMutexLock l(&ubsan_init_mu);
2018-12-28 15:30:48 +00:00
if (!ubsan_initialized) {
2017-04-10 11:32:00 +00:00
CommonStandaloneInit();
2018-12-28 15:30:48 +00:00
ubsan_initialized = true;
2015-08-28 15:33:40 +00:00
}
2017-04-10 11:32:00 +00:00
}
2018-12-28 15:30:48 +00:00
void __ubsan::InitAsStandaloneIfNecessary() { return InitAsStandalone(); }
2017-04-10 11:32:00 +00:00
void __ubsan::InitAsPlugin() {
SpinMutexLock l(&ubsan_init_mu);
2018-12-28 15:30:48 +00:00
if (!ubsan_initialized) {
CommonInit();
ubsan_initialized = true;
}
2017-04-10 11:32:00 +00:00
}
#endif // CAN_SANITIZE_UB