1 //===-- ubsan_handlers_cxx.h ------------------------------------*- C++ -*-===// 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 // Entry points to the runtime library for Clang's undefined behavior sanitizer, 11 // for C++-specific checks. This code is not linked into C binaries. 12 // 13 //===----------------------------------------------------------------------===// 14 #ifndef UBSAN_HANDLERS_CXX_H 15 #define UBSAN_HANDLERS_CXX_H 16 17 #include "ubsan_value.h" 18 19 namespace __ubsan { 20 21 struct DynamicTypeCacheMissData { 22 SourceLocation Loc; 23 const TypeDescriptor &Type; 24 void *TypeInfo; 25 unsigned char TypeCheckKind; 26 }; 27 28 struct CFIBadTypeData { 29 SourceLocation Loc; 30 const TypeDescriptor &Type; 31 unsigned char TypeCheckKind; 32 }; 33 34 /// \brief Handle a runtime type check failure, caused by an incorrect vptr. 35 /// When this handler is called, all we know is that the type was not in the 36 /// cache; this does not necessarily imply the existence of a bug. 37 extern "C" SANITIZER_INTERFACE_ATTRIBUTE 38 void __ubsan_handle_dynamic_type_cache_miss( 39 DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash); 40 extern "C" SANITIZER_INTERFACE_ATTRIBUTE 41 void __ubsan_handle_dynamic_type_cache_miss_abort( 42 DynamicTypeCacheMissData *Data, ValueHandle Pointer, ValueHandle Hash); 43 44 /// \brief Handle a control flow integrity check failure by printing a 45 /// diagnostic. 46 extern "C" SANITIZER_INTERFACE_ATTRIBUTE void 47 __ubsan_handle_cfi_bad_type(CFIBadTypeData *Data, ValueHandle Vtable); 48 extern "C" SANITIZER_INTERFACE_ATTRIBUTE void 49 __ubsan_handle_cfi_bad_type_abort(CFIBadTypeData *Data, ValueHandle Vtable); 50 51 } 52 53 #endif // UBSAN_HANDLERS_H 54