Home | History | Annotate | Download | only in ubsan
      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))
     24 void (*__local_ubsan_preinit)(void) = __ubsan::InitAsStandalone;
     25 #else
     26 // Use a dynamic initializer.
     27 class UbsanStandaloneInitializer {
     28  public:
     29   UbsanStandaloneInitializer() {
     30     __ubsan::InitAsStandalone();
     31   }
     32 };
     33 static UbsanStandaloneInitializer ubsan_standalone_initializer;
     34 #endif  // SANITIZER_CAN_USE_PREINIT_ARRAY
     35 
     36