1//===-- ubsan_init_standalone.cc ------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Initialization of standalone UBSan runtime.
11//
12//===----------------------------------------------------------------------===//
13
14#include "ubsan_platform.h"
15#if !CAN_SANITIZE_UB
16# error "UBSan is not supported on this platform!"
17#endif
18
19#include "sanitizer_common/sanitizer_internal_defs.h"
20#include "ubsan_init.h"
21
22#if SANITIZER_CAN_USE_PREINIT_ARRAY
23__attribute__((section(".preinit_array"), used))
24void (*__local_ubsan_preinit)(void) = __ubsan::InitAsStandalone;
25#else
26// Use a dynamic initializer.
27class UbsanStandaloneInitializer {
28 public:
29  UbsanStandaloneInitializer() {
30    __ubsan::InitAsStandalone();
31  }
32};
33static UbsanStandaloneInitializer ubsan_standalone_initializer;
34#endif  // SANITIZER_CAN_USE_PREINIT_ARRAY
35
36